package Ġcom . bit love . f et life . view model . binding Ċ Ċ import Ġandroid . databinding . Binding Adapter Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . content . Context Ċ import Ġandroid . databinding . Data Binding Util Ċ import Ġandroid . databinding . ViewData Binding Ċ import Ġandroid . text . Html Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . view . get Ċ import Ġandroidx . view . size Ċ import Ġcom . android . databinding . library . base Adapters . BR Ċ import Ġcom . bit love . f et life . R Ċ import Ġcom . bit love . f et life . model . data object . base . Comment Ċ import Ġcom . bit love . f et life . load With G lide Ċ import Ġcom . bit love . f et life . view model . generic . Comment ViewData Holder Ċ Ċ @ Binding Adapter (" comments ", Ġ" comments Displayed ") Ċ fun Ġset Comments ( view Group : ĠViewGroup , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomments : ĠList < Comment > ?, Ġcomments Displayed : ĠBoolean ?) Ġ{ ĊĠĠĠ Ġif Ġ( view Group . visibility Ġ== ĠView . GONE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( comments Ġ== Ġnull Ġ|| Ġcomments . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġview Group . removeAll Views () ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġmax Comments Ġ= ĠMath . min ( comments . size , if Ġ( comments Displayed Ġ== Ġtrue ) ĠComment ViewData Holder . COMMENT _ MAX _ COUNT _ EXP AN DED Ġelse ĠComment ViewData Holder . COMMENT _ MAX _ COUNT _ COLL AP SED ) ĊĠĠĠ Ġif ( view Group . child Count Ġ> Ġmax Comments ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview Group . remove Views ( max Comments , view Group . child Count - max Comments ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġinflater Ġ= Ġview Group . context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getSystem Service ( Context . LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmax Comments ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= Ġif Ġ( view Group . size Ġ> Ġi ) Ġview Group [ i ]. tag Ġas ĠView Data Binding Ġelse ĠData Binding Util ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate < ViewData Binding >( in flater , ĠR . layout . item _ data _ card _ comment , Ġview Group , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġview Group [ i ]. tag Ġ= Ġbinding ĊĠĠĠĠĠĠĠ Ġval Ġcomment Ġ= Ġcomments [ i ]. copy () ĊĠĠĠĠĠĠĠ Ġif Ġ( comments Displayed Ġ!= Ġtrue Ġ&& Ġcomment . body Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comment . body !!. length Ġ> ĠComment . TRUNC ATED _ LENGTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment . body Ġ= Ġcomment . body !!. substring ( 0 , ĠComment . TRUNC ATED _ LENGTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment . body Ġ= Ġcomment . body !!. substring ( 0 , comment . body !!. lastIndexOf (' Ġ')) Ġ+ ĠComment . TRUNC ATED _ SUFFIX ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . set Variable ( BR . comment Data , Ġcomment ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Binding Adapter (" formatted Text ", Ġ" text Entities ", Ġ" media Entity Holder ", Ġ" remove Line Break s ") Ċ fun Ġset Formatted Text ( textView : ĠTextView ?, Ġformatted Text : ĠString ?, Ġtext Entities Ġ: ĠString ? Ġ= Ġnull , Ġmedia Entity Holder Ġ: ĠInt , Ġremove Line Break s Ġ: ĠBoolean ? Ġ= Ġfalse ) Ġ{ ĊĠĠĠ Ġif Ġ( formatted Text Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ ĠtextView ?. text Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġformatted String Ġ= Ġformatted Text ĊĠĠĠ Ġif Ġ( remove Line Break s Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġformatted String Ġ= Ġformatted Text ?. replace ("\\ s ". to Regex (), " Ġ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// TODO ĠAdd ĠText Ġentities Ġto Ġthe Ġappropriate Ġview ĊĠĠĠ ĠtextView ?. text Ġ= ĠHtml . from Html ( formatted String ) Ċ } ĊĊ Ċ @ Binding Adapter (" src G lide ") Ċ fun Ġset G lide Src ( imageView : ĠImageView , Ġsrc G lide : ĠString ?) Ġ{ ĊĠĠĠ ĠimageView . load With G lide ( src G lide , ĠR . mip map . ic _ launcher _ round ) Ċ } Ċ Ċ // TODO : Ġcheck Ġout Ġother Ġlist Ġbindings : Ċ // Ġhttps :// medium . com / google - developers / android - data - binding - list - tr icks - ef 3 d 5 6 3 0 5 5 5 e Ċ // Ġhttps :// github . com / ev ant / binding - collection - adapter Ċ Ċ // Generic ĠList ĠBinding Ċ //@ Binding Adapter (" entries ", Ġ" layout ") Ċ // fun Ġ< T > Ġset Comments ( view Group : ĠViewGroup , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries : ĠList < T > ?, Ġlayout Id : ĠInt ) Ġ{ Ċ // ĠĠĠ Ġview Group . removeAll Views () Ċ // ĠĠĠ Ġif Ġ( entries Ġ== Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġval Ġinflater Ġ= Ġview Group . context Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. getSystem Service ( Context . LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater Ċ // ĠĠĠ Ġfor Ġ( i Ġin Ġentries . indices ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġentries [ i ] Ċ // ĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠData Binding Util Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate < ViewData Binding >( in flater , Ġlayout Id , Ġview Group , Ġtrue ) Ċ // ĠĠĠĠĠĠĠ Ġbinding . set Variable ( BR . data , Ġentry ) Ċ // ĠĠĠ Ġ} Ċ //}