/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠNew ĠVector ĠLtd Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġim . vector . ri ot re design . features . home . room . detail . timeline . item Ċ Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . widget . AppCompat TextView Ċ import Ġandroidx . core . text . Pre computed Text Compat Ċ import Ġandroidx . core . widget . TextView Compat Ċ import Ġcom . air bnb . e po xy . E po xy Attribute Ċ import Ġcom . air bnb . e po xy . E po xy Model Class Ċ import Ġim . vector . matrix . android . api . permalink s . Matrix Link ify Ċ import Ġim . vector . ri ot re design . R Ċ import Ġim . vector . ri ot re design . features . html . P ill Image Span Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ @ E po xy Model Class ( layout Ġ= ĠR . layout . item _ timeline _ event _ text _ message ) Ċ abstract Ġclass ĠMessage Text Item Ġ: ĠAbs Message Item < Message Text Item . Holder >() Ġ{ ĊĊĠĠĠ Ġ@ E po xy Attribute Ġvar Ġmessage : ĠSp ann able ? Ġ= Ġnull ĊĠĠĠ Ġ@ E po xy Attribute Ġoverride Ġlateinit Ġvar Ġinformation Data : ĠMessage Information Data ĊĊĠĠĠ Ġoverride Ġfun Ġbind ( holder : ĠH older ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . bind ( holder ) ĊĠĠĠĠĠĠĠ ĠMatrix Link ify . add Link Movement Method ( holder . message View ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Future Ġ= ĠPre computed Text Compat . getText Future ( message Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTextView Compat . getText Metrics Params ( holder . message View ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ) ĊĠĠĠĠĠĠĠ Ġholder . message View . setText Future ( text Future ) ĊĠĠĠĠĠĠĠ Ġfind P ills And Process Ġ{ Ġit . bind ( holder . message View ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind P ills And Process ( process Block : Ġ( span : ĠP ill Image Span ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp ill Image Spans : ĠArray < P ill Image Span >? Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage ?. let Ġ{ Ġsp ann able Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able . get Spans ( 0 , Ġsp ann able . length , ĠP ill Image Span :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp ill Image Spans ?. forEach Ġ{ Ġprocess Block ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠH older Ġ: ĠAbs Message Item . Holder () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġavatar ImageView Ġby Ġbind < ImageView >( R . id . message Avatar ImageView ) ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġmember Name View Ġby Ġbind < TextView >( R . id . message Member Name View ) ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtime View Ġby Ġbind < TextView >( R . id . message Time View ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage View Ġby Ġbind < AppCompat TextView >( R . id . message TextView ) ĊĠĠĠ Ġ} ĊĊ Ċ }