package Ġcom . w olk orp . pe tre scue . fragments Ċ Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . content . Content Values . TAG Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget .* Ċ import Ġandroidx . appcompat . app . ActionBar Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . google . firebase . Timestamp Ċ import Ġcom . google . firebase . auth . k tx . auth Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Ċ import Ġcom . google . firebase . firestore . k tx . toObject Ċ import Ġcom . google . firebase . k tx . Firebase Ċ import Ġcom . w olk orp . pe tre scue . R Ċ import Ġcom . w olk orp . pe tre scue . adapters . Comments Adapter Ċ import Ġcom . w olk orp . pe tre scue . models . Com ent ario Ċ import Ġcom . w olk orp . pe tre scue . models . Com ent ario Full Ċ import Ġcom . w olk orp . pe tre scue . models . User Ċ import Ġkotlinx . android . synt hetic . main . fragment _ post _ detail .* Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . math . log ĊĊ Ċ class ĠPost Detail Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfragment View : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcomments RecyclerView : ĠRecyclerView ĊĠĠĠ Ġvar Ġcomments List Ġ= ĠArrayList < Com ent ario >() ĊĠĠĠ Ġvar Ġcomments Full List Ġ= ĠArrayList < Com ent ario Full >() ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprofile _ img Ġ: ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprofile _ img _ current Ġ: ĠImageView ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtxt _ username Ġ: ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtxt _ fecha Ġ: ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġedit Text Comment Ġ: ĠEditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbtn Com ent ar Ġ: ĠButton ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġfragment View Ġ= Ġinflater . inflate ( R . layout . fragment _ post _ detail , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġcomments RecyclerView Ġ= Ġfragment View . findViewById ( R . id . re cyclerView _ comments ) ĊĠĠĠĠĠĠĠ Ġprofile _ img Ġ= Ġfragment View . findViewById ( R . id . profile _ img ) ĊĠĠĠĠĠĠĠ Ġprofile _ img _ current Ġ= Ġfragment View . findViewById ( R . id . profile _ img _ current ) ĊĠĠĠĠĠĠĠ Ġtxt _ username Ġ= Ġfragment View . findViewById ( R . id . txt _ username ) ĊĠĠĠĠĠĠĠ Ġtxt _ fecha Ġ= Ġfragment View . findViewById ( R . id . txt _ fecha ) ĊĠĠĠĠĠĠĠ Ġedit Text Comment Ġ= Ġfragment View . findViewById ( R . id . edit Text _ comment ) ĊĠĠĠĠĠĠĠ Ġbtn Com ent ar Ġ= Ġfragment View . findViewById ( R . id . btn _ env iar Comment ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfragment View ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġupdate ActionBar Title () ĊĠĠĠĠĠĠĠ Ġval Ġpost Ġ Ġ= ĠPost Detail Fragment Args . from Bundle ( require Arguments ()). selected Post ĊĠĠĠĠĠĠĠ Ġconfigure RecyclerView () ĊĠĠĠĠĠĠĠ Ġget Comments From Firebase ( post . id ) ĊĊĠĠĠĠĠĠĠ Ġpost _ detail _ text view . text Ġ= Ġpost . texto ĊĠĠĠĠĠĠĠ Ġtxt _ fecha . text Ġ= ĠgetTime ( post . hora ) ĊĊĠĠĠĠĠĠĠ Ġupdate Current Image () ĊĠĠĠĠĠĠĠ ĠgetUser From Firebase ( post . id Usuario ) ĊĊĠĠĠĠĠĠĠ Ġset Button ( post . id ) ĊĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġupdate ActionBar Title () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠB arra Ġsuperior Ġde Ġla Ġactivity Ġque Ġap are ce Ġenc ima Ġdel Ġfragment ĊĠĠĠĠĠĠĠ Ġval Ġaction Bar : ĠAction Bar ? Ġ= Ġ( activity Ġas ĠAppCompatActivity ?) !!. support ActionBar ĊĠĠĠĠĠĠĠ Ġaction Bar ?. title Ġ= Ġ Ġ" Com ent arios " ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ĠFunc ion Ġpara Ġpas ar Ġla Ġhora Ġdel Ġpost Ġa Ġun Ġstring Ġque Ġindic a Ġh ace Ġcuando Ġf ue Ġc read o ĊĠĠĠ Ġprivate Ġfun ĠgetTime ( time Post Ġ: ĠTimestamp ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtime String Ġ: ĠString ĊĠĠĠĠĠĠĠ Ġval Ġtime Now Ġ= ĠTimestamp ( Date ()) ĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ: ĠLong Ġ= Ġtime Now . toDate (). time Ġ- Ġtime Post . toDate (). time ĊĠĠĠĠĠĠĠ Ġval Ġseconds Ġ= Ġdiff Ġ/ Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġminutes Ġ= Ġseconds Ġ/ Ġ 6 0 ĊĠĠĠĠĠĠĠ Ġif ( minutes . toInt () Ġ== Ġ 0 ) Ġtime String Ġ= Ġ" h ace Ġun Ġmoment o " Ġelse Ġtime String Ġ= Ġ" h ace Ġ${ minutes . toInt ()} Ġmin utos / s " ĊĊĠĠĠĠĠĠĠ Ġif ( minutes Ġ> Ġ 6 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhours Ġ= Ġminutes Ġ/ Ġ 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime String Ġ= Ġ" h ace Ġ${ hours . toInt ()} Ġhora / s " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( hours Ġ> Ġ 2 4 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġhours Ġ/ Ġ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime String Ġ= Ġ" h ace Ġ${ days . toInt ()} Ġdia / s " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtime String ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetUser From Firebase ( id Usuario Ġ: ĠString ){ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠFirebase Fire store . getInstance (). collection (" Users "). document ( id Usuario ) ĊĠĠĠĠĠĠĠ Ġquery . add Snapshot Listener Ġ{ Ġdocument , Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( Content Values . TAG , Ġ" Listen Ġfailed .", Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Snapshot Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( document Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser : ĠUser Ġ= Ġdocument . toObject () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Image ( user . profile ImageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ username . text Ġ=" ${ user . userName } Ġ${ user . user LastName }" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġprivate Ġfun Ġupdate Image ( link Ġ: ĠString ){ ĊĠĠĠĠĠĠĠ ĠG lide ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( link ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( profile _ img ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Actual iza Ġla Ġimagen Ġdel Ġusuario Ġque Ġesta Ġusando Ġla Ġaplic acion Ġen Ġel Ġsector Ġpara Ġhacer Ġun Ġnuevo Ġcom ent ario ĊĠĠĠ Ġprivate Ġfun Ġupdate Current Image (){ ĊĠĠĠĠĠĠĠ Ġval ĠcurrentUser Ġ= ĠFirebase . auth . currentUser !!. uid ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠFirebase Fire store . getInstance (). collection (" Users "). document ( currentUser ) ĊĠĠĠĠĠĠĠ Ġquery . add Snapshot Listener { Ġdocument , Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( Content Values . TAG , Ġ" Listen Ġfailed .", Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Snapshot Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( document Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser : ĠUser Ġ= Ġdocument . toObject () !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsi Ġno Ġtiene Ġimagen Ġde Ġperfil Ġmuestra Ġla Ġpredetermin ada Ġque Ġesta Ġen Ġdraw ables ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( user . profile ImageUrl . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( user . profile ImageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( profile _ img _ current ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// set ea Ġel Ġbot on Ġpara Ġenv iar Ġel Ġcom ent ario ĊĠĠĠ Ġprivate Ġfun Ġset Button ( id Post Ġ: ĠString ){ ĊĠĠĠĠĠĠĠ Ġbtn Com ent ar . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexto Com ent ario Ġ= Ġedit Text Comment . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( texto Com ent ario . isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" In gre se Ġalgun Ġm ensaje ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Usuario Ġ= ĠFirebase . auth . currentUser !!. uid ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Comment Ġ= ĠFirebase Fire store . getInstance (). collection (" Posts "). document ( id Post ). collection (" comments "). document (). getId () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Ġ= ĠCom ent ario ( texto Com ent ario , Ġid Comment , Ġid Usuario , ĠTimestamp ( Date ())) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Fire store . getInstance (). collection (" Posts "). document ( id Post ). collection (" comments "). document ( id Comment ). set ( comment ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomments List . add ( comment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text Comment . text . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" Com ent ario Ġenv i ado ", ĠToast . LENGTH _ SHORT ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure RecyclerView (){ ĊĠĠĠĠĠĠĠ Ġcomments RecyclerView . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġcomments RecyclerView . layout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġcomments RecyclerView . adapter Ġ= ĠComments Adapter ( comments Full List , require Context (), ĠFirebase . auth . currentUser !!. uid ){ Ġid Com ent ario Ġ-> Ġdelete Comment ( id Com ent ario Ġ)} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Comments Full (){ ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( comment Ġin Ġcomments List ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetUser From Firebase ( comment . id Usuario , Ġcomment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// Ġfuncion Ġpara Ġcrear Ġuna Ġlista Ġde Ġcom ent arios Ġcon Ġla Ġinform acion Ġdel Ġusuario , Ġlista Ġque Ġse Ġusa Ġen Ġel Ġre cycler ĊĠĠĠ Ġprivate Ġfun ĠgetUser From Firebase ( id Usuario Ġ: ĠString , comment Ġ: ĠCom ent ario ){ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠFirebase Fire store . getInstance (). collection (" Users "). document ( id Usuario ) ĊĠĠĠĠĠĠĠ Ġquery . add Snapshot Listener Ġ{ Ġdocument , Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( Content Values . TAG , Ġ" Listen Ġfailed .", Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Snapshot Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( document Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser : ĠUser Ġ= Ġdocument . toObject () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserName Ġ= Ġ"${ user . userName } Ġ${ user . user LastName }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomments Full List . add ( Com ent ario Full ( comment . texto , id Usuario , comment . hora , userName , user . profile ImageUrl , comment . id )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure RecyclerView () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Comments From Firebase ( id Post Ġ: ĠString ){ ĊĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠFirebase Fire store ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. collection (" Posts "). document ( id Post ). collection (" comments ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. orderBy (" hora ") ĊĠĠĠĠĠĠĠ Ġquery . add Snapshot Listener Ġ{ Ġsnapshot , Ġerror Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( Content Values . TAG , Ġ" Listen Ġfailed .", Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Snapshot Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomments List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomments Full List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( snapshot Ġ!= Ġnull Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( post Ġin Ġsnapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomments List . add ( post . toObject ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSe Ġtiene Ġque Ġll amar Ġdesp ues Ġde Ġque Ġla Ġlista Ġpost Ġobt eng a Ġtodos Ġlos Ġpost Ġde Ġfirebase , Ġs ino Ġro mp e ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure RecyclerView () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( Content Values . TAG , Ġ" Current Ġdata : Ġnull ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Comments Full () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Func ion Ġpara Ġenv iar Ġal Ġre cycler , Ġpara Ġelim inar Ġun Ġcom ent ario ĊĠĠĠ Ġprivate Ġfun Ġdelete Comment ( id Com ent ario Ġ: ĠString ){ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" delete Comment : Ġbor r ando Ġcom ent ario Ġcon Ġid Ġ$ id Com ent ario ") ĊĊĠĠĠĠĠĠĠ Ġval Ġpost Ġ= ĠPost Detail Fragment Args . from Bundle ( require Arguments ()). selected Post ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" delete Comment : Ġen Ġel Ġpost Ġcon Ġid Ġ${ post . id }") ĊĠĠĠĠĠĠĠ ĠFirebase Fire store . getInstance (). collection (" Posts "). document ( post . id ). collection (" comments "). document ( id Com ent ario ). delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĠLog . d ( TAG , Ġ" Document Snapshot Ġsuccessfully Ġdeleted !") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġe Ġ-> ĠLog . w ( TAG , Ġ" Error Ġdeleting Ġdocument ", Ġe ) Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }