/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠX iz hi ĠZ hu Ċ Ġ* Ċ Ġ* Ġ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 Ġme . x iz zh u . android . j osh ua . reading . verse Ċ Ċ import Ġandroid . text . Sp ann able StringBuilder Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . Color Int Ċ import Ġme . x iz zh u . android . j osh ua . R Ċ import Ġme . x iz zh u . android . j osh ua . core . Settings Ċ import Ġme . x iz zh u . android . j osh ua . core . Ver se Ċ import Ġme . x iz zh u . android . j osh ua . reading . Ver se Update Ċ import Ġme . x iz zh u . android . j osh ua . ui .* Ċ import Ġme . x iz zh u . android . j osh ua . ui . recyclerview . Base Item Ċ import Ġme . x iz zh u . android . j osh ua . ui . recyclerview . Base ViewHolder Ċ Ċ data Ġclass ĠSimple Ver se Item ( val Ġver se : ĠVer se , Ġprivate Ġval Ġtotal Ver se Count : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġfollowing Empty Ver se Count : ĠInt , Ġ@ Color Int Ġvar Ġhighlight Color : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠonClick ed : Ġ( Ver se ) Ġ-> ĠUnit , Ġval Ġon Long Clicked : Ġ( Ver se ) Ġ-> ĠUnit , Ġvar Ġselected : ĠBoolean Ġ= Ġfalse ) ĊĠĠĠ Ġ: ĠBase Item ( R . layout . item _ simple _ verse , Ġ{ Ġinflater , Ġparent Ġ-> ĠSimple Ver se Item ViewHolder ( in flater , Ġparent ) Ġ}) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSTRING _ BUILDER Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSP AN N ABLE _ STRING _ BUILDER Ġ= ĠSp ann able StringBuilder () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġindex For Display : ĠCharSequence Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( verse . parallel . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTRING _ BUILDER . set Length ( 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġver se Index Ġ= Ġver se . verse Index . verse Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( following Empty Ver se Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTRING _ BUILDER . append ( verse Index Ġ+ Ġ 1 ). append ('- '). append ( verse Index Ġ+ Ġfollowing Empty Ver se Count Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( total Ver se Count Ġ>= Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( total Ver se Count Ġ< Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( verse Index Ġ+ Ġ 1 Ġ< Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTRING _ BUILDER . append (' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( verse Index Ġ+ Ġ 1 Ġ< Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTRING _ BUILDER . append (" Ġ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( verse Index Ġ+ Ġ 1 Ġ< Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTRING _ BUILDER . append (' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTRING _ BUILDER . append ( verse Index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ lazy ĠSTRING _ BUILDER . toString () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ lazy Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġtext For Display : ĠCharSequence Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= ĠSP AN N ABLE _ STRING _ BUILDER . format ( verse , Ġfollowing Empty Ver se Count , Ġtrue , Ġhighlight Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠSimple Ver se Item ViewHolder ( in flater : ĠLayoutInflater , Ġparent : ĠViewGroup ) ĊĠĠĠ Ġ: ĠBase ViewHolder < Simple Ver se Item >( in flater . inflate ( R . layout . item _ simple _ verse , Ġparent , Ġfalse )) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġresources Ġ= ĠitemView . resources ĊĠĠĠ Ġprivate Ġval Ġindex Ġ= ĠitemView . findViewById ( R . id . index ) Ġas ĠTextView ĊĠĠĠ Ġprivate Ġval Ġtext Ġ= ĠitemView . findViewById ( R . id . text ) Ġas ĠTextView ĊĠĠĠ Ġprivate Ġval Ġdivider Ġ= ĠitemView . findViewById ( R . id . divider ) Ġas ĠView ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠitemView . setOnClickListener Ġ{ Ġitem ?. let Ġ{ Ġit . on Clicked ( it . verse ) Ġ} Ġ} ĊĠĠĠĠĠĠĠ ĠitemView . setOn Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem ?. let Ġ{ Ġit . on Long Clicked ( it . verse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Long ClickListener Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbind ( settings : ĠSettings , Ġitem : ĠSimple Ver se Item , Ġpayload s : ĠList < Any >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( payload s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextColor Ġ= Ġif Ġ( item . selected ) Ġsettings . get Primary Selected TextColor ( resources ) Ġelse Ġsettings . get Primary TextColor ( resources ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Size Ġ= Ġsettings . getBody Text Size ( resources ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext . text Ġ= Ġitem . text For Display ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext . setTextColor ( textColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext . setText Size ( Typed Value . COMPLEX _ UNIT _ PX , Ġtext Size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . verse . parallel . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex . text Ġ= Ġitem . index For Display ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex . setTextColor ( textColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex . setText Size ( Typed Value . COMPLEX _ UNIT _ PX , Ġtext Size Ġ* Ġ 0 . 8 5 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . isSelected Ġ= Ġitem . selected ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload s . forEach Ġ{ Ġpayload Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate Ġ= Ġpayload Ġas ĠVer se Update ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( update . operation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVer se Update . VERSE _ SELECTED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . selected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( settings . night Mode On ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext . animate TextColor ( settings . get Primary Selected TextColor ( resources )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVer se Update . VERSE _ DE SELECTED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . selected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . isSelected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( settings . night Mode On ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext . animate TextColor ( settings . get Primary TextColor ( resources )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVer se Update . HIG HL IGHT _ UPDATED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . highlight Color Ġ= Ġupdate . data Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . text For Display Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext . text Ġ= Ġitem . text For Display ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ