package ĠF rag ments Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . example . biz not i 0 . Add Post Ċ import Ġcom . example . biz not i 0 . R Ċ import Ġcom . google . android . material . button . Material Button Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . database . Data Snapshot Ċ import Ġcom . google . firebase . database . Database Error Ċ import Ġcom . google . firebase . database . Firebase Database Ċ import Ġcom . google . firebase . database . Value EventListener Ċ import Ġcom . google . firebase . firestore . Collection Reference Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Ċ import Ġkotlinx . android . synt hetic . main . fragment _ create _ post .* Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . HashMap Ċ Ċ // ĠTODO : ĠRename Ġparameter Ġarguments , Ġchoose Ġnames Ġthat Ġmatch Ċ // Ġthe Ġfragment Ġinitialization Ġparameters , Ġe . g . ĠARG _ ITEM _ NUMBER Ċ private Ġconst Ġval ĠARG _ PARAM 1 Ġ= Ġ" param 1 " Ċ private Ġconst Ġval ĠARG _ PARAM 2 Ġ= Ġ" param 2 " Ċ Ċ /** Ċ Ġ* ĠA Ġsimple Ġ[ Fragment ] Ġsubclass . Ċ Ġ* ĠUse Ġthe Ġ[ Create Post . newInstance ] Ġfactory Ġmethod Ġto Ċ Ġ* Ġcreate Ġan Ġinstance Ġof Ġthis Ġfragment . Ċ Ġ*/ Ċ class ĠCreate Post Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġ// ĠTODO : ĠRename Ġand Ġchange Ġtypes Ġof Ġparameters ĊĠĠĠ Ġprivate Ġvar Ġparam 1 : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġparam 2 : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġarguments ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam 1 Ġ= Ġit . getString ( ARG _ PARAM 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam 2 Ġ= Ġit . getString ( ARG _ PARAM 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ create _ post , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUse Ġthis Ġfactory Ġmethod Ġto Ġcreate Ġa Ġnew Ġinstance Ġof ĊĠĠĠĠĠĠĠĠ Ġ* Ġthis Ġfragment Ġusing Ġthe Ġprovided Ġparameters . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġparam 1 ĠParameter Ġ 1 . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġparam 2 ĠParameter Ġ 2 . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠA Ġnew Ġinstance Ġof Ġfragment ĠCreate Post . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠRename Ġand Ġchange Ġtypes Ġand Ġnumber Ġof Ġparameters ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( param 1 : ĠString , Ġparam 2 : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCreate Post (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( ARG _ PARAM 1 , Ġparam 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( ARG _ PARAM 2 , Ġparam 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval Ġsend Post Ġ= Ġview . findViewById < Material Button >( R . id . Create Post ) ĊĠĠĠĠĠĠĠ Ġval Ġproposal Id Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠ Ġsend Post ?. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Proposal To Firebase Database ( proposal Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġproposal Name Field Ġ= Ġview . findViewById < EditText >( R . id . Proposal Name ) ĊĊĠĠĠĠĠĠĠ Ġproposal Name Field ?. setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġselect . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( activity , ĠAdd Post :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" Proposal Id ", Ġproposal Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Proposal To Firebase Database ( proposal Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdb Ref : ĠCollection Reference Ġ= ĠFirebase Fire store . getInstance (). collection (" pro posals ") ĊĊĠĠĠĠĠĠĠ Ġval Ġuid Ġ= ĠFirebase Auth . getInstance (). uid Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ Ġval Ġproposal Name : ĠString Ġ= ĠProposal Name . text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġproposal Type : ĠString Ġ= ĠProposal Type . text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġproposal Description : ĠString Ġ= ĠProposal Description . text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġminimum Case : ĠString Ġ= ĠMinimum Case . text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġowner : ĠString Ġ= Ġuid ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( proposal Name . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġ" Proposal ĠName Ġis Ġmust ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( proposal Type . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġ" Proposal ĠType Ġis Ġmust ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( proposal Description . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġ" Proposal ĠDescription Ġis Ġmust ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( minimum Case . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġ" minimum Case Ġis Ġmust ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal Item Ġ= ĠHashMap < String , ĠAny >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġget Img Link Ġ= ĠFirebase Database . getInstance (). reference . child (" Image Posts "). child ( proposal Id ). child (" post Image ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Img Link . addListener For Single Value Event ( object Ġ: ĠValue EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Data Change ( snapshot : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimg Link Ġ= Ġsnapshot . value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproposal Item . put (" link ", Ġimg Link ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( database Error : ĠDatabase Error ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproposal Item . put (" owner ", Ġowner ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproposal Item . put (" proposal Id ", Ġproposal Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproposal Item . put (" proposal Name ", Ġproposal Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproposal Item . put (" proposal Type ", Ġproposal Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproposal Item . put (" proposal Description ", Ġproposal Description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproposal Item . put (" minimum Case ", Ġminimum Case ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproposal Item . put (" time Created ", ĠSystem . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Ref . document ( proposal Id ). set ( proposal Item ). add On Success Listener Ġ{ Ġvoid : ĠVoid ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġ" Proposal Ġhas Ġbeen ĠPost ed ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . navigation _ home , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception : Ġjava . lang . Exception Ġ-> ĠToast . makeText ( require Context (), Ġ" Proposal Ġhas Ġbeen ĠPost ed ", ĠToast . LENGTH _ LONG ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġe . toString (), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ