package Ġna . ke ph as . kit ve i . adapter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . Sp ann able StringBuilder Ċ import Ġandroid . text . style . BackgroundColor Span Ċ import Ġandroid . text . style . Character Style Ċ import Ġandroid . text . style . ForegroundColor Span Ċ import Ġandroid . text . style . Relative Size Span Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . widget . AppCompat TextView Ċ import Ġandroidx . core . text . Pre computed Text Compat Ċ import Ġandroidx . paging . Paged ListAdapter Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġkotlinx . android . synt hetic . main . main _ rv _ item . view .* Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġna . ke ph as . kit ve i . Prefs Ċ import Ġna . ke ph as . kit ve i . R Ċ import Ġna . ke ph as . kit ve i . data . Bible Ċ import Ġna . ke ph as . kit ve i . page . Formatting Ċ import Ġna . ke ph as . kit ve i . util .* ĊĊ Ċ @ Suppress (" UNUSED _ PARAMETER ") Ċ class ĠMain Adapter ( context : ĠContext ) Ġ: ĠP aged ListAdapter < Bible , ĠMain Adapter . ViewHolder >( DIFF _ CALLBACK ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Stable Ids ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( LayoutInflater . from ( parent . context ). inflate ( R . layout . main _ rv _ item , Ġparent , Ġfalse )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind ( getItem ( position )) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetItem ( position )?. id ?. to Long () Ġ?: Ġposition . to Long () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġm ClickListener : ĠItem ClickListener ? Ġ= Ġnull ĊĊĠĠĠ Ġinternal Ġfun Ġset ClickListener ( item ClickListener : ĠItem ClickListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m ClickListener Ġ= Ġitem ClickListener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Click ( view : ĠView , Ġposition : ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset FontSize ( size : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġsize ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind In Page ( query : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġfind In Page Query Ġ= Ġquery ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfix Matches List Size ( size : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmatches List Ġ= ĠInt Array ( size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Currently Highlight ed ( index : ĠInt ?, Ġelement : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Highlight Index Ġ= Ġindex ĊĠĠĠĠĠĠĠ Ġcurrent Highlight Element Index Ġ= Ġelement ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinner Ġclass ĠViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ), ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġprivate Ġval Ġis RTL : ĠBoolean Ġby Ġlazy Ġ{ ĠText Utils Compat . get Layout Direction From Locale ( java . util . Locale . getDefault ()) Ġ!= ĠView Compat . LAYOUT _ DIRECTION _ LTR Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠtextView Ġ= ĠitemView . Main TextView ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// textView . type face Ġ= ĠFonts . G ent ium Plus _ R ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġ( is RTL Ġ&& ĠtextView . rotation Y Ġ!= Ġ 1 8 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ ĠtextView . rotation Y Ġ= Ġ 1 8 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ClickListener ?. on Item Click ( view , Ġadapter Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( row : ĠBible ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( row Ġ!= Ġnull Ġ&& Ġadapter Position Ġ>= Ġ 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Deferred Result Unused ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync ( fixed ThreadPool ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// textView . pre compute AndSet Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Text Ġ= ĠSp ann able StringBuilder ( row . verse Id . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Text . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Span ( ForegroundColor Span ( Formatting . Num Color ), Ġ 0 , Ġs Text . length , ĠSp ann able . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Span ( Relative Size Span ( fontSize Ġ/ Ġ 2 f ), Ġ 0 , Ġs Text . length , ĠSp ann able . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnums Len Ġ= Ġs Text . length ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġvar Ġtext Ġ= Ġrow . verse Text !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTrim Ġ<< Ġ[ TEXT ] Ġ>> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text . indexOf ('< ') Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext . substring ( text . lastIndexOf (' >') Ġ+ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( text . contains ('< ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext . substring ( 0 , Ġtext . indexOf ('< ') Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Text Ġ= ĠSp ann able StringBuilder ( text ) */ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Text . append ( row . verse Text !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Text . indexOf ('< '). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnums Len ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Text . delete ( nums Len , Ġs Text . lastIndexOf (' >') Ġ+ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( it Ġ> Ġnums Len ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Text . delete ( it Ġ- Ġ 1 , Ġs Text . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠApply Ġit al ics ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġs Text . count ("[ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġ 1 .. count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Text . indexOf (' [' ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġs Text . indexOf (' ]', Ġit Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Text . set Span ( Character Style . wrap ( Custom Type face Span ( Fonts . G ent ium Plus _ I )) Ġas ĠCharacter Style , Ġstart , Ġend , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Text . delete ( it , Ġit Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Text . delete ( end Ġ- Ġ 1 , Ġend ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Text . set Span ( ForegroundColor Span ( Formatting . TextColor ), Ġnums Len , Ġs Text . length , ĠSp ann able . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Text . set Span ( Relative Size Span ( fontSize ), Ġnums Len , Ġs Text . length , ĠSp ann able . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( find In Page Query Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatches List [ adapter Position ] Ġ= Ġs Text . count ( find In Page Query !! ) Ġ{ Ġstart , Ġend , Ġcount So Far Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Text . set Span ( Character Style . wrap ( BackgroundColor Span ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Highlight Element Index Ġ!= Ġnull Ġ&& Ġcurrent Highlight Element Index Ġ== Ġcount So Far Ġ&& Ġcurrent Highlight Index Ġ== Ġadapter Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFormat ting . Highlight Focus Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFormat ting . High Light Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġas ĠCharacter Style ), Ġstart , Ġend , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġindex Ġof Ġcorrect ĠRed Letter Ġto Ġstyle Ġthe Ġcurrent Ġver se ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* val Ġidx Ġ= Ġred Letters . indexOf First Ġ{ Ġ( row . book Id Ġ== Ġit . book Id Ġ&& Ġrow . chapter Id Ġ== Ġit . chapter Id Ġ&& Ġrow . verse Id Ġ== Ġit . verse Id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( idx Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// d Ġ{ Ġ" red Idx : Ġ$ idx Ġpos : Ġ$ adapter Position Ġ${ row . book Name } Ġ${ row . chapter Id }:${ row . verse Id } Ġ${ Ġred Letters . elementAt OrNull ( idx )?. positions }| $ s Text " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġred Letters . elementAt OrNull ( idx )?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( pair Ġin Ġpositions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Text . set Span ( Character Style . wrap ( ForegroundColor Span ( Red Letter Color ) Ġas ĠCharacter Style ), Ġpair . first Ġ+ Ġnums Len , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pair . second Ġ- Ġ 1 Ġ+ Ġnums Len Ġ> Ġs Text . length ) Ġpair . second Ġ- Ġ 2 Ġ+ Ġnums Len Ġelse Ġpair . second Ġ- Ġ 1 Ġ+ Ġnums Len , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ//} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Text . insert ( 0 , Ġ"\ t \ t ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( UI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstart Ġpre compute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfuture Ġ= ĠPre computed Text Compat . getText Future ( s Text , Ġ( textView Ġas ĠAppCompat TextView ). text Metrics Params Compat , ĠIO _ EXECUT OR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġpass Ġfuture Ġto ĠTextView , Ġwhich Ġawait s Ġresult Ġbefore Ġmeas uring ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setText Future ( future !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// d Ġ{" Setting ĠText Ġat Ġ$ adapter Position "} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TextUtils . concat ("\ t \ t ", Ġnums , Ġs Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// textView . setText ( TextUtils . concat ("\ t \ t ", Ġnums , Ġs Text ), ĠTextView . Buffer Type . SPAN N ABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠfontSize Ġ= ĠP refs . text Size Multiplier ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġfind In Page Query : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġmatches List Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent Highlight Index : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent Highlight Element Index : ĠInt ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDIFF _ CALLBACK Ġ= Ġobject Ġ: ĠDiff Util . Item Callback < Bible >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠBible , Ġnew Item : ĠBible ): ĠBoolean Ġ= Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠBible , Ġnew Item : ĠBible ): ĠBoolean Ġ= Ġold Item Ġ== Ġnew Item ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }