/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 2 Ġ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 . progress Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . filter NotNull Ċ import Ġkotlinx . coroutines . launch Ċ import Ġme . x iz zh u . android . j osh ua . core .* Ċ import Ġme . x iz zh u . android . j osh ua . infra . Base ViewModel Ċ import Ġme . x iz zh u . android . j osh ua . infra . on Failure Ċ import Ġme . x iz zh u . android . j osh ua . infra . view Data Ċ import Ġme . x iz zh u . android . j osh ua . ui . recyclerview . Base Item Ċ import Ġme . x iz zh u . android . j osh ua . utils . first NotEmpty Ċ import Ġme . x iz zh u . android . logger . Log Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠReading Progress ViewData ( val Ġitems : ĠList < Base Item >) Ċ Ċ @ H ilt ViewModel Ċ class ĠReading Progress ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġb ible Reading Manager : ĠBible Reading Manager , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġreading Progress Manager : ĠReading Progress Manager , ĊĠĠĠĠĠĠĠ Ġsettings Manager : ĠSettings Manager , ĊĠĠĠĠĠĠĠ Ġapplication : ĠApplication Ċ ) Ġ: ĠBase ViewModel ( settings Manager , Ġapplication ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġreading Progress : ĠMutable State Flow < ViewData < Reading Progress ViewData > ?> Ġ= ĠMutable State Flow ( null ) ĊĠĠĠ Ġprivate Ġval Ġexpanded : ĠArray < Boolean > Ġ= ĠArray ( Bible . BOOK _ COUNT ) Ġ{ Ġit Ġ== Ġ 0 Ġ} ĊĊĠĠĠ Ġfun Ġreading Progress (): ĠFlow < ViewData < Reading Progress ViewData >> Ġ= Ġreading Progress . filter NotNull () ĊĊĠĠĠ Ġfun Ġload Reading Progress () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreading Progress . value Ġ= ĠView Data . Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreading Progress . value Ġ= ĠView Data . Success ( Reading Progress ViewData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġbuild Reading Progress Items ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreading Progress Ġ= Ġreading Progress Manager . read (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Names Ġ= Ġb ible Reading Manager . read Book Names ( bible Reading Manager . current Translation (). first NotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( tag , Ġ" Error Ġoccurred Ġwhile Ġloading Ġreading Ġprogress ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreading Progress . value Ġ= ĠView Data . Failure ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Reading Progress Items ( reading Progress : ĠReading Progress , Ġbook Names : ĠList < String >): ĠList < Base Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= ĠArrayList < Base Item >( 1 Ġ+ ĠBible . BOOK _ COUNT ) ĊĠĠĠĠĠĠĠ Ġitems . add ( Reading Progress Summary Item ( 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 )) ĊĊĠĠĠĠĠĠĠ Ġvar Ġtotal Chapter s Read Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġchapter s Read Per Book Ġ= ĠArray ( Bible . BOOK _ COUNT ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchapter Count Ġ= ĠBible . get Chapter Count ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArrayList < Boolean >( chapter Count ). apply Ġ{ Ġrepeat ( chapter Count ) Ġ{ Ġadd ( false ) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchapter s Read Count Per Book Ġ= ĠArray ( Bible . BOOK _ COUNT ) Ġ{ Ġ 0 Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( chapter Ġin Ġreading Progress . chapter Reading Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( chapter . read Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchapter s Read Per Book [ chapter . book Index ][ chapter . chapter Index ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchapter s Read Count Per Book [ chapter . book Index ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ total Chapter s Read ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġfinished Books Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġfinished Old Test ament Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġfinished New Test ament Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ(( book Index , Ġchapter s Read ) Ġin Ġchapter s Read Per Book . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchapter s Read Count Ġ= Ġchapter s Read Count Per Book [ book Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( chapter s Read Count Ġ== ĠBible . get Chapter Count ( book Index )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ finished Books ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( book Index Ġ< ĠBible . OLD _ TEST AM ENT _ COUNT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ finished Old Test ament ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ finished New Test ament ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( Reading Progress Detail Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Names [ book Index ], Ġbook Index , Ġchapter s Read , Ġchapter s Read Count , Ġ:: on Book Clicked , Ġexpanded [ book Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġitems [ 0 ] Ġ= ĠReading Progress Summary Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreading Progress . continuous Reading Days , Ġtotal Chapter s Read , Ġfinished Books , Ġfinished Old Test ament , Ġfinished New Test ament ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġitems ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Book Clicked ( book Index : ĠInt , Ġexpanded : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . expanded [ book Index ] Ġ= Ġexpanded ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Current Ver se Index ( verse To Open : ĠVer se Index ): ĠFlow < ViewData < Unit >> Ġ= Ġview Data Ġ{ ĊĠĠĠĠĠĠĠ Ġb ible Reading Manager . save Current Ver se Index ( verse To Open ) ĊĠĠĠ Ġ}. on Failure Ġ{ ĠLog . e ( tag , Ġ" Failed Ġto Ġsave Ġcurrent Ġver se ", Ġit ) Ġ} Ċ } Ċ