package Ġcom . reci _ p . reci _ p . activities Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Intent Ċ import Ġandroid . opengl . Visibility Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . design . widget . Floating ActionButton Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Animation Ċ import Ġandroid . view . animation . Translate Animation Ċ import Ġandroid . widget .* Ċ import Ġcom . facebook . draw ee . backends . pipeline . F resco Ċ import Ġcom . facebook . draw ee . view . Simple Draw ee View Ċ import Ġcom . github . jor ge cast illo pr z . FAB Progress Circle Ċ import Ġcom . google . firebase . Firebase App Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . storage . Firebase Storage Ċ import Ġcom . gun 0 9 1 2 . ted permission . Permission Listener Ċ import Ġcom . gun 0 9 1 2 . ted permission . T ed Permission Ċ import Ġcom . reci _ p . reci _ p . R Ċ import Ġcom . reci _ p . reci _ p . data . Recipe Ċ import Ġcom . reci _ p . reci _ p . helpers . DataManager Ċ import Ġcom . reci _ p . reci _ p . helpers . DataManager . Companion . realm Ċ import Ġgun 0 9 1 2 . ted bot to mp icker . T ed Bottom Picker Ċ import Ġio . realm . Realm List Ċ import Ġorg . jetbrains . ank o . image Ċ import Ġorg . jetbrains . ank o . image Resource Ċ import Ġorg . jetbrains . ank o . sdk 2 5 . coroutines . on Long Click Ċ import Ġjava . util .* ĊĊ Ċ class ĠEditor Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġrecipe Model Ġ= ĠRecipe ( creator Ġ= ĠFirebase Auth . getInstance (). currentUser !!. uid ) ĊĠĠĠ Ġprivate Ġvar Ġupload Status Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ editor ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpermission listener Ġ= Ġobject Ġ: ĠPermission Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Permission Granted () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Permission Denied ( den ied Permissions : ĠArrayList < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" Permission ĠDen ied \ n " Ġ+ Ġdenied Permissions . toString (), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠT ed Permission . with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Permission Listener ( permission listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Denied Message (" If Ġyou Ġreject Ġpermission , you Ġcan Ġnot Ġuse Ġthis Ġservice \ n \ n Please Ġturn Ġon Ġpermissions Ġat Ġ[ Setting ] Ġ> Ġ[ Permission ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Permissions ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. check () ĊĠĠĠĠĠĠĠ Ġif Ġ( this . intent . has Extra (" recipe Id ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Manager . get Recipe ( this . intent . getString Extra (" recipe Id "), Ġ{ Ġrecipe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recipe Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recipe . owner Ġ!= ĠFirebase Auth . getInstance (). currentUser !!. uid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . recipe Model Ġ= ĠRecipe ( Firebase Auth . getInstance (). currentUser !!. uid , ĠUUID . randomUUID (). toString (), Ġrecipe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . recipe Model Ġ= Ġrecipe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Recipe View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Recipe View () ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Ingredient ( v Ġ: ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrealm . execute Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Model . ingredients . add (( findViewById < EditText >( R . id . ingredient Text )). text . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Recipe View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Ingredient ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlin Layout Ġ= ĠfindViewById < LinearLayout >( R . id . ingredient Holder ) ĊĠĠĠĠĠĠĠ Ġval Ġing r Ġ= Ġv . findViewById < TextView >( R . id . ingredient _ text ). text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġnew Ing redients Ġ= Ġrecipe Model . ingredients . to Mutable List () ĊĠĠĠĠĠĠĠ Ġnew Ing redients . remove ( ing r ) ĊĠĠĠĠĠĠĠ Ġrealm . execute Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Model . ingredients Ġ= ĠRealm List (* new Ing redients . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= ĠTranslate Animation ( Animation . REL ATIVE _ TO _ PARENT , Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation . REL ATIVE _ TO _ PARENT , Ġ 1 . 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation . REL ATIVE _ TO _ PARENT , Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation . REL ATIVE _ TO _ PARENT , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġanimation . duration Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġanimation . fill After Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġv . start Animation ( animation ) ĊĠĠĠĠĠĠĠ Ġanimation . set Animation Listener ( object Ġ: ĠAnimation . Animation Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( arg 0 : ĠAnimation ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( arg 0 : ĠAnimation ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( arg 0 : ĠAnimation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlin Layout . remove View ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġadd Instruction ( v Ġ: ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrealm . execute Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Model . instructions . add (( findViewById < EditText >( R . id . instruction Text )). text . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Recipe View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Instruction ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlin Layout Ġ= ĠfindViewById < LinearLayout >( R . id . instruction Holder ) ĊĠĠĠĠĠĠĠ Ġval Ġing r Ġ= Ġv . findViewById < TextView >( R . id . instruction _ text ). text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġnew Instructions Ġ= Ġrecipe Model . instructions . to Mutable List () ĊĠĠĠĠĠĠĠ Ġnew Instructions . remove ( ing r ) ĊĠĠĠĠĠĠĠ Ġrealm . execute Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Model . instructions Ġ= ĠRealm List (* new Instructions . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= ĠTranslate Animation ( Animation . REL ATIVE _ TO _ PARENT , Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation . REL ATIVE _ TO _ PARENT , Ġ 1 . 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation . REL ATIVE _ TO _ PARENT , Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation . REL ATIVE _ TO _ PARENT , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġanimation . duration Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġanimation . fill After Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġv . start Animation ( animation ) ĊĠĠĠĠĠĠĠ Ġanimation . set Animation Listener ( object Ġ: ĠAnimation . Animation Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( arg 0 : ĠAnimation ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( arg 0 : ĠAnimation ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( arg 0 : ĠAnimation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlin Layout . remove View ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Recipe View () Ġ{ ĊĠĠĠĠĠĠĠ ĠfindViewById < EditText >( R . id . recipe Title ). setText ( recipe Model . title ) ĊĠĠĠĠĠĠĠ ĠfindViewById < EditText >( R . id . recipe Desc ). setText ( recipe Model . description ) ĊĠĠĠĠĠĠĠ ĠfindViewById < EditText >( R . id . recipe Prep Time ). setText ( recipe Model . prep Time ) ĊĠĠĠĠĠĠĠ ĠfindViewById < EditText >( R . id . recipe Cook Time ). setText ( recipe Model . cook Time ) ĊĠĠĠĠĠĠĠ ĠfindViewById < EditText >( R . id . recipe Cook Time ). setText ( recipe Model . cook Time ) ĊĠĠĠĠĠĠĠ Ġif Ġ( recipe Model . photo Ġ!= Ġ"" Ġ&& Ġrecipe Model . photo Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Re ci - P ", Ġ" HERE Ġ${ recipe Model . photo }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl String Ġ= Ġ" gs ://${ Firebase App . getInstance () !!. options !!. storage Bucket }/${ recipe Model . photo }" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Storage . getInstance (). getReference From Url ( url String ). download Url . add On Success Listener Ġ{ Ġuri Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Re ci - P ", Ġ" URI : Ġ${ uri . toString () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontroller Ġ= ĠF resco . new Draw ee Controller Builder (). set Uri ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimg View Ġ= ĠfindViewById < Simple Draw ee View >( R . id . app _ bar _ image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg View . controller Ġ= Ġcontroller . set Old Controller ( img View . controller ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ Ġexception Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Re ci - P ", Ġ" Error Ġgetting ĠURI Ġfor Ġimage : Ġ${ exception . localized Message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠfindViewById < Rating Bar >( R . id . recipe Rating ). rating Ġ= Ġrecipe Model . rating ĊĊĠĠĠĠĠĠĠ ĠfindViewById < LinearLayout >( R . id . ingredient Holder ). removeAll Views () ĊĠĠĠĠĠĠĠ Ġrecipe Model . ingredients . forEach Ġ{ Ġing r Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ing r . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( this ). inflate ( R . layout . ingredient , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . findViewById < TextView >( R . id . ingredient _ text ). text Ġ= Ġing r ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . on Long Click Ġ{ Ġv Ġ-> Ġremove Ingredient ( v !! ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < LinearLayout >( R . id . ingredient Holder ). addView ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( findViewById < EditText >( R . id . ingredient Text )). text . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠfindViewById < LinearLayout >( R . id . instruction Holder ). removeAll Views () ĊĠĠĠĠĠĠĠ Ġrecipe Model . instructions . forEach Ġ{ Ġinst Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! inst . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( this ). inflate ( R . layout . instruction , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . findViewById < TextView >( R . id . instruction _ text ). text Ġ= Ġinst ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . on Long Click Ġ{ Ġv Ġ-> Ġremove Instruction ( v !! ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < LinearLayout >( R . id . instruction Holder ). addView ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( findViewById < EditText >( R . id . instruction Text )). text . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Recipe View () Ġ{ ĊĠĠĠĠĠĠĠ ĠfindViewById < LinearLayout >( R . id . ingredient Holder ). removeAll Views () ĊĠĠĠĠĠĠĠ Ġrecipe Model . ingredients . forEach Ġ{ Ġing r Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ing r . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( this ). inflate ( R . layout . ingredient , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . findViewById < TextView >( R . id . ingredient _ text ). text Ġ= Ġing r ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . on Long Click Ġ{ Ġv Ġ-> Ġremove Ingredient ( v !! ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < LinearLayout >( R . id . ingredient Holder ). addView ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( findViewById < EditText >( R . id . ingredient Text )). text . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠfindViewById < LinearLayout >( R . id . instruction Holder ). removeAll Views () ĊĠĠĠĠĠĠĠ Ġrecipe Model . instructions . forEach Ġ{ Ġinst Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! inst . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( this ). inflate ( R . layout . instruction , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . findViewById < TextView >( R . id . instruction _ text ). text Ġ= Ġinst ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . on Long Click Ġ{ Ġv Ġ-> Ġremove Instruction ( v !! ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < LinearLayout >( R . id . instruction Holder ). addView ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( findViewById < EditText >( R . id . instruction Text )). text . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Image ( v : ĠView ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġt ed Bottom Picker Ġ= ĠT ed Bottom Picker . Builder ( this @ Editor Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Image Selected Listener Ġ{ Ġuri Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhere Ġis Ġselected Ġuri ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġphoto Ġ= Ġ" images /" Ġ+ Ġrecipe Model . id Ġ+ Ġ". png " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstorage Ġ= ĠFirebase Storage . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstorage Ref Ġ= Ġstorage . reference . child ( photo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupload Task Ġ= Ġstorage Ref . put File ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( findViewById < Simple Draw ee View >( R . id . app _ bar _ image )). setImage URI ( uri , Ġthis @ Editor Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupload Status Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfab Progress Ġ= ĠfindViewById < FAB Progress Circle >( R . id . fab Progress Circle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab Progress . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRegister Ġob servers Ġto Ġlisten Ġfor Ġwhen Ġthe Ġdownload Ġis Ġdone Ġor Ġif Ġit Ġfails ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupload Task . add On Failure Listener ({ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHandle Ġun successful Ġuploads ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( findViewById < Simple Draw ee View >( R . id . app _ bar _ image )). setImage URI ( null Ġas ĠString ?) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Editor Activity , Ġ" Upload ĠFailed : Ġ" Ġ+ Ġe . localized Message , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab Progress . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupload Status Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). add On Success Listener ({ Ġtask Snapshot Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtask Snapshot . getMetadata () Ġcontains Ġfile Ġmetadata Ġsuch Ġas Ġsize , Ġcontent - type , Ġand Ġdownload ĠURL . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdownload Url Ġ= Ġtask Snapshot . download Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrealm . execute Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Model . photo Ġ= Ġphoto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab Progress . begin Final Animation () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Editor Activity , Ġ" Upload Ġsuccessful , ĠURL : Ġ" Ġ+ Ġdownload Url , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupload Status Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĊĠĠĠĠĠĠĠ Ġt ed Bottom Picker . show ( support FragmentManager ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Recipe From View () Ġ{ ĊĠĠĠĠĠĠĠ Ġrealm . execute Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Model . title Ġ= Ġ( findViewById < EditText >( R . id . recipe Title )). text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Model . description Ġ= Ġ( findViewById < EditText >( R . id . recipe Desc )). text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Model . prep Time Ġ= Ġ( findViewById < EditText >( R . id . recipe Prep Time )). text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Model . cook Time Ġ= Ġ( findViewById < EditText >( R . id . recipe Cook Time )). text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Model . rating Ġ= ĠfindViewById < Rating Bar >( R . id . recipe Rating ). rating ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Recipe ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfab Progress Ġ= ĠfindViewById < FAB Progress Circle >( R . id . fab Progress Circle _ save ) ĊĠĠĠĠĠĠĠ Ġfab Progress . show () ĊĠĠĠĠĠĠĠ Ġif Ġ( upload Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Editor Activity , Ġ" Please Ġwait Ġfor Ġimage Ġupload Ġto Ġfinish Ġbefore Ġsaving .", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Recipe From View () ĊĠĠĠĠĠĠĠ Ġrealm . execute Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Model . modified TS Ġ= ĠDate (). time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Model . owner Ġ= ĠFirebase Auth . getInstance (). currentUser !!. uid ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Manager . create Recipe ( recipe Model , Ġ{ Ġrecipe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recipe Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Editor Activity , Ġ" Recipe Ġcreation Ġsuccessful !", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Editor Activity , Ġ" Recipe Ġcreation Ġun successful !", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab Progress . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ Ċ } Ċ