package Ġcom . we gd ut . we gd ut . ui . post _ details Ċ Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . we gd ut . we gd ut . R Ċ import Ġcom . we gd ut . we gd ut . data . Image Item Ċ import Ġcom . we gd ut . we gd ut . data . post . Post Ċ import Ġcom . we gd ut . we gd ut . ui . Grid Spacing Item Decoration Ċ import Ġcom . we gd ut . we gd ut . ui . Image Display Ċ import Ġcom . we gd ut . we gd ut . ui . ViewHolder Helper Ċ import Ġcom . we gd ut . we gd ut . ui . embedded _ comment . Embedded Comment Adapter Ċ import Ġcom . we gd ut . we gd ut . ui . post . Grid Image Adapter 3 X 3 Ċ import Ġcom . we gd ut . we gd ut . utils . Date Utils Ċ import Ġcom . we gd ut . we gd ut . utils . G lide Utils Ċ import Ġcom . we gd ut . we gd ut . utils . UI Utils Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠPost Details Adapter Ġ@ Inject Ġconstructor () Ġ: ĠEmbedded Comment Adapter < Post >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget ViewHolder ( view Type : ĠInt , Ġview : ĠView ): ĠViewHolder ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( view Type Ġ== ĠR . layout . item _ post _ details ) ĠBlog ViewHolder ( view ) ĊĠĠĠĠĠĠĠ Ġelse Ġsuper . get ViewHolder ( view Type , Ġview ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠBlog ViewHolder ) Ġholder . image Display Ġ= Ġimage Display ĊĠĠĠĠĠĠĠ Ġsuper . on Bind ViewHolder ( holder , Ġposition ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBlog ViewHolder ( item View : ĠView ) Ġ: ĠViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġicon : ĠImageView Ġ= ĠitemView . findViewById ( R . id . icon ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnickname : ĠTextView Ġ= ĠitemView . findViewById ( R . id . nickname ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtime : ĠTextView Ġ= ĠitemView . findViewById ( R . id . time ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcontent : ĠTextView Ġ= ĠitemView . findViewById ( R . id . content ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġre cyclerView : ĠRecyclerView Ġ= ĠitemView . findViewById ( R . id . recycler _ view ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsingle Image : ĠImageView Ġ= ĠitemView . findViewById ( R . id . single _ image ) ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġgrid Image Adapter 3 X 3 : ĠGrid Image Adapter 3 X 3 Ġ= ĠGrid Image Adapter 3 X 3 () ĊĠĠĠĠĠĠĠ Ġvar Ġimage Display : ĠImage Display ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġpost : ĠPost ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlayout Manager : ĠGrid LayoutManager ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġshow Image ( pos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image Display Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġviews Ġ= Ġmutable ListOf < View >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( single Image . visibility Ġ== ĠView . VISIBLE ) Ġviews . add ( single Image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlayout Manager . child Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grid Image Adapter 3 X 3 . get Real Position ( i ) Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager . getChild At ( i )?. let Ġ{ Ġviews . add ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Display !!. show Images ( post . images . map Ġ{ Ġit . url Ġ}. to Typed Array (), Ġpos , Ġviews ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠGrid LayoutManager ( re cyclerView . context , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= Ġlayout Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġgrid Image Adapter 3 X 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Decoration Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid Spacing Item Decoration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUI Utils . dp 2 px ( re cyclerView . context , Ġ 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . addItem Decoration ( item Decoration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Image . setOnClickListener Ġ{ Ġshow Image ( 0 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Image Adapter 3 X 3 . on ItemClickListener Ġ= Ġobject Ġ: ĠOn ItemClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView , Ġpos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal Pos Ġ= Ġgrid Image Adapter 3 X 3 . get Real Position ( pos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( real Pos Ġ< Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Image ( real Pos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind ( data : ĠItem ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġif Ġ( data . data Ġis ĠPost ) Ġdata . data Ġelse Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . i Like Animation Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . i Comment Animation Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewHolder Helper . update ( nickname , Ġitem . user . nickname ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewHolder Helper . update ( icon , Ġitem . user . icon , Ġfalse ) Ġ{ Ġimg , Ġurl Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide Utils . load ( img , ĠImage Item ( url ), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . shape _ rect _ image _ placeholder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( img ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewHolder Helper . update ( time , ĠDate Utils . format ( item . post Time )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewHolder Helper . update ( content , Ġitem . content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . visibility Ġ= Ġif Ġ( item . content . isBlank ()) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Image . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . suppress Layout ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . images . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Image . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewHolder Helper . update ( single Image , Ġitem . images [ 0 ], Ġfalse ) Ġ{ Ġimg , Ġimg Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide Utils . load ( img , Ġimg Item , Ġtrue , Ġsize Limit Ġ= Ġ 6 0 0 ). into ( img ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Image Adapter 3 X 3 . items Ġ= Ġitem . images ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . suppress Layout ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetContent Item ( content : ĠPost ): ĠItem Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠItem ( content . id , ĠR . layout . item _ post _ details , Ġcontent ) ĊĠĠĠ Ġ} Ċ Ċ }