package Ġcom . example . sn pl c . adapters Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Image Button Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . recyclerview . widget . Async List Differ Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . Request Manager Ċ import Ġcom . example . sn pl c . R Ċ import Ġcom . example . sn pl c . data . entities . Post Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . k tx . Firebase Ċ import Ġkotlinx . android . synt hetic . main . item _ post . view .* Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠPost Adapter Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġg lide : ĠRequest Manager Ċ ) Ġ: ĠRecyclerView . Adapter < Post Adapter . Post ViewHolder >() Ġ{ ĊĊĠĠĠ Ġclass ĠPost ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġglobals ĊĠĠĠĠĠĠĠĠ Ġ* Ġif Ġusing Ġkotlin Ġsynt het ics , Ġsaves Ġcalls Ġto ĠfindViewById , Ġreferenced Ġonce Ġ( good Ġpractice ) ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġiv Post Image : ĠImageView Ġ= ĠitemView . iv Post Image ĊĠĠĠĠĠĠĠ Ġval Ġiv Author Profile Image : ĠImageView Ġ= ĠitemView . iv Author Profile Image ĊĠĠĠĠĠĠĠ Ġval Ġtv Post Author : ĠTextView Ġ= ĠitemView . tv Post Author ĊĠĠĠĠĠĠĠ Ġval Ġtv Post Text : ĠTextView Ġ= ĠitemView . tv Post Text ĊĠĠĠĠĠĠĠ Ġval Ġtv Lik edBy : ĠTextView Ġ= ĠitemView . tv Lik edBy ĊĠĠĠĠĠĠĠ Ġval Ġib Like : ĠImage Button Ġ= ĠitemView . ib Like ĊĠĠĠĠĠĠĠ Ġval Ġib Comments : ĠImage Button Ġ= ĠitemView . ib Comments ĊĠĠĠĠĠĠĠ Ġval Ġib Delete Post : ĠImage Button Ġ= ĠitemView . ib Delete Post ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdiff Callback Ġ= Ġobject Ġ: ĠDiff Util . Item Callback < Post >() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġupdate Ġonly Ġchanged Ġitems Ġin Ġre cy lc er Ġview ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠPost , Ġnew Item : ĠPost ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . hashCode () Ġ== Ġnew Item . hashCode () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠPost , Ġnew Item : ĠPost ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġlist - differ Ġ: Ġhandles Ġupdate Ġprocess ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġdiffer Ġ= ĠAsync List Differ ( this , Ġdiff Callback ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġlist Ġof Ġposts Ġto Ġbe Ġdisplayed Ġin Ġre cycler Ġview ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġposts : ĠList < Post > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdiffer . current List Ġ// Ġthe Ġlist Ġof Ġitems Ġin Ġour Ġre cycler Ġview ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ= Ġdiffer . submit List ( value ) Ġ// Ġsubmit List , Ġsets Ġupdate Ġlist ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠPost ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPost ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . item _ post , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġposts . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠPost ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpost Ġ= Ġposts [ position ] ĊĊĠĠĠĠĠĠĠ Ġholder . apply Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġg lide . load ( post . imageUrl ). into ( iv Post Image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg lide . load ( post . author Profile Picture Url ). into ( iv Author Profile Image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Post Author . text Ġ= Ġpost . author Username ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Post Text . text Ġ= Ġpost . text ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlike Count Ġ= Ġpost . lik edBy . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Lik edBy . text Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlike Count Ġ<= Ġ 0 Ġ-> Ġ" No Ġlikes " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlike Count Ġ== Ġ 1 Ġ-> Ġ" Lik ed Ġby Ġ 1 Ġperson " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" Lik ed Ġby Ġ$ like Count Ġpeople " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuid Ġ= ĠFirebase Auth . getInstance (). uid !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġib Delete Post . isVisible Ġ= Ġuid Ġ== Ġpost . author Uid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshow Ġdelete Ġpost Ġbutton ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġlogged - in Ġuser Ġmade Ġthat Ġpost ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġib Like . setImage Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( post . is Lik ed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ like ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ like _ border ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġtrigger ĠonClick Listeners ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Post Author . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon User ClickListener ?. let Ġ{ Ġclick Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick ( post . author Uid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiv Author Profile Image . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon User ClickListener ?. let Ġ{ Ġclick Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick ( post . author Uid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Lik edBy . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Lik edBy ClickListener ?. let Ġ{ Ġclick Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick ( post ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġib Like . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Like ClickListener ?. let Ġ{ Ġclick Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! post . is Lik ing ) Ġclick ( post , Ġholder . layout Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġib Comments . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Comments ClickListener ?. let Ġ{ Ġclick Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick ( post ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġib Delete Post . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Post ClickListener ?. let Ġ{ Ġclick Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick ( post ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġon Like ClickListener : Ġ(( Post , ĠInt ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġon User ClickListener : Ġ(( String ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠonDelete Post ClickListener : Ġ(( Post ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġon Lik edBy ClickListener : Ġ(( Post ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġon Comments ClickListener : Ġ(( Post ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġset On Like ClickListener ( listener : Ġ( Post , ĠInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Like ClickListener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On User ClickListener ( listener : Ġ( String ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon User ClickListener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Delete Post ClickListener ( listener : Ġ( Post ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠonDelete Post ClickListener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Lik edBy ClickListener ( listener : Ġ( Post ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Lik edBy ClickListener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Comments ClickListener ( listener : Ġ( Post ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Comments ClickListener Ġ= Ġlistener ĊĠĠĠ Ġ} Ċ }