package Ġn tu . platform . cook ery . ui . fragment . add _ recipe Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . activity . result . Activity Result Ċ import Ġandroidx . activity . result . contract . Activity Result Contracts Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . github . d hav al 2 4 0 4 . image picker . Image Picker Ċ import Ġn tu . platform . cook ery . R Ċ import Ġn tu . platform . cook ery . base . Binding Fragment Ċ import Ġn tu . platform . cook ery . base . DIR _ IMAGE _ P ICK ER Ċ import Ġn tu . platform . cook ery . databinding . Fragment Add Recipe Steps Info Binding Ċ import Ġn tu . platform . cook ery . data . firebase . FB Storage Repository Ċ import Ġn tu . platform . cook ery . util . load With G lide Ċ import Ġn tu . platform . cook ery . util . set Display Home As Up Ċ import Ġn tu . platform . cook ery . util . setTitle Ċ import Ġn tu . platform . cook ery . util . set ToolBar Ċ import Ġjava . io . File Ċ import Ġjava . lang . Exception ĊĊ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" CY . frag . ingredient _ info " Ċ class ĠAdd Recipe Step Info Fragment Ġ: ĠBinding Fragment < Fragment Add Recipe Steps Info Binding >() Ġ{ ĊĠĠĠ Ġoverride Ġval Ġbinding Inflater : Ġ( LayoutInflater ) Ġ-> ĠFragment Add Recipe Steps Info Binding ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠFragment Add Recipe Steps Info Binding :: inflate ĊĊĠĠĠ Ġprivate Ġval Ġ_ viewModel : ĠAdd Recipe ViewModel Ġby Ġ Ġactivity ViewModels () ĊĊĠĠĠ Ġprivate Ġval Ġimage Result Launcher Ġ= Ġregister For Activity Result ( Activity Result Contracts . Start Activity For Result ()) Ġ{ Ġresult : ĠActivity Result Ġ-> ĊĠĠĠĠĠĠĠ Ġval ĠresultCode Ġ= Ġresult . result Code ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġresult . data ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( result Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ OK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Uri Ġ= Ġdata ?. data !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuid Ġ= Ġ_ viewModel . user . value !!. uid !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFB Storage Repository . upload Recipe Graphic ( uid , Ġfile Uri ). observe ( view Lifecycle Owner ,{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ viewModel . step Graphic . value Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Picker . RESULT _ ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), ĠImage Picker . getError ( data ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġ" Task ĠCancel led ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġinit Toolbar () ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĊĠĠĠĠĠĠĠ Ġinit Binding () ĊĠĠĠĠĠĠĠ Ġobserve ViewModel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Toolbar (){ ĊĠĠĠĠĠĠĠ Ġset ToolBar ( binding . toolbar Layout . toolbar ) ĊĠĠĠĠĠĠĠ ĠsetTitle ( R . string . title _ add _ step ) ĊĠĠĠĠĠĠĠ Ġset Display Home As Up ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Binding (){ ĊĠĠĠĠĠĠĠ Ġwith ( binding ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġview Lifecycle Owner ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= Ġ_ viewModel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphic . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Image Picker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve ViewModel (){ ĊĠĠĠĠĠĠĠ Ġ_ viewModel . step Graphic . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . graphic . load With G lide ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlaunch Image Picker (){ ĊĠĠĠĠĠĠĠ ĠImage Picker . with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. crop Square () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. max Result Size ( 1 0 8 0 , 1 0 8 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. save Dir ( File ( require Context (). cacheDir , ĠDIR _ IMAGE _ P ICK ER )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Intent Ġ{ Ġintent -> Ġimage Result Launcher . launch ( intent ) Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . save , Ġmenu ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( item . itemId ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ save Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave (){ ĊĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ viewModel . add Step () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ viewModel . clear Step Info () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊ Ċ }