/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 Ġe Al va . com Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . e al va . to que . ui . library Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . compose . foundation . Image Ċ import Ġandroidx . compose . foundation . layout . Padding Values Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . size Ċ import Ġandroidx . compose . foundation . lazy . Lazy Column Ċ import Ġandroidx . compose . foundation . lazy . items Ċ import Ġandroidx . compose . foundation . lazy . remember Lazy List State Ċ import Ġandroidx . compose . material . Experimental Material Api Ċ import Ġandroidx . compose . material . ListItem Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Immutable Ċ import Ġandroidx . compose . runtime . collect As State Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . text . style . Text Overflow Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . constraint layout . compose . Constraint Layout Ċ import Ġandroidx . constraint layout . compose . Dimension Ċ import Ġco il . compose . remember Image Painter Ċ import Ġcom . e al va . e al v ab rain z . common . Album Title Ċ import Ġcom . e al va . e al v ab rain z . common . Artist Name Ċ import Ġcom . e al va . e al val og . invoke Ċ import Ġcom . e al va . e al val og . lazy Logger Ċ import Ġcom . e al va . to que . R Ċ import Ġcom . e al va . to que . db . Album Dao Ċ import Ġcom . e al va . to que . db . Album Description Ċ import Ġcom . e al va . to que . log ._ e Ċ import Ġcom . e al va . to que . persist . Album Id Ċ import Ġcom . e al va . to que . ui . config . Local Screen Config Ċ import Ġcom . e al va . to que . ui . library . All Album s ViewModel . Album Info Ċ import Ġcom . github . m ichael bull . result . Err Ċ import Ġcom . github . m ichael bull . result . Ok Ċ import Ġcom . google . ac comp an ist . in sets . navigation Bars Padding Ċ import Ġcom . google . ac comp an ist . in sets . status Bars Padding Ċ import Ġcom . zh u inden . simple stack . Scoped Services Ċ import Ġcom . zh u inden . simple stack . Service Binder Ċ import Ġcom . zh u inden . simple stack compose integration . services . remember Service Ċ import Ġcom . zh u inden . simple stack extensions . services k tx . add Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . cancel Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . parcel ize . Parcel ize Ċ import Ġorg . k oin . core . component . K oin Component Ċ import Ġorg . k oin . core . component . get Ċ Ċ private Ġval ĠLOG Ġby Ġlazy Logger ( All Album s Screen :: class ) Ċ Ċ @ Immutable Ċ @ Parcel ize Ċ data Ġclass ĠAll Album s Screen ( ĊĠ Ġprivate Ġval Ġno Arg : ĠString Ġ= Ġ"" Ċ ) Ġ: ĠBase Library Items Screen (), ĠK oin Component Ġ{ ĊĠ Ġoverride Ġfun Ġbind Services ( service Binder : ĠService Binder ) Ġ{ ĊĠĠĠ Ġwith ( service Binder ) Ġ{ Ġadd ( All Album s ViewModel ( get ())) Ġ} ĊĠ Ġ} ĊĠ Ġ@ Composable ĊĠ Ġoverride Ġfun ĠScreen Composable ( modifier : ĠModifier ) Ġ{ ĊĠĠĠ Ġval ĠviewModel Ġ= Ġremember Service < All Album s ViewModel >() ĊĠĠĠ Ġval Ġalbum s Ġ= ĠviewModel . all Album s . collect As State () ĊĠĠĠ ĠAll Album s List ( albums . value ) ĊĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠAll Album s List ( list : ĠList < Album Info >) Ġ{ ĊĠ Ġval Ġlist State Ġ= Ġremember Lazy List State () ĊĠ Ġval Ġconfig Ġ= ĠLocal Screen Config . current ĊĠ Ġval Ġsheet Height Ġ= Ġconfig . get Nav Plus Bottom Sheet Height ( is Expanded Ġ= Ġtrue ) ĊĊĠ ĠLazy Column ( ĊĠĠĠ Ġstate Ġ= Ġlist State , ĊĠĠĠ Ġcontent Padding Ġ= ĠPadding Values ( start Ġ= Ġ 8 . dp , Ġtop Ġ= Ġ 8 . dp , Ġbottom Ġ= Ġsheet Height , Ġend Ġ= Ġ 8 . dp ), ĊĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠ Ġ. status Bars Padding () ĊĠĠĠĠĠ Ġ. navigation Bars Padding ( bottom Ġ= Ġfalse ) ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġitems ( list ) Ġ{ Ġalbum Info Ġ-> ĠAlbum Item ( album Info Ġ= Ġalbum Info ) Ġ} ĊĠ Ġ} Ċ } Ċ Ċ @ Opt In ( Experimental Material Api :: class ) Ċ @ Composable Ċ private Ġfun ĠAlbum Item ( album Info : ĠAlbum Info ) Ġ{ ĊĠ ĠListItem ( ĊĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width (), ĊĠĠĠ Ġicon Ġ= Ġ{ ĊĠĠĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠ Ġpainter Ġ= Ġremember Image Painter ( ĊĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġalbum Info . art work , ĊĠĠĠĠĠĠĠĠĠ Ġbuilder Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror ( R . drawable . ic _ big _ album ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplaceholder ( R . drawable . ic _ big _ album ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġstring Resource ( R . string . Album Art ), ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . size ( 4 0 . dp ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}, ĊĠĠĠ Ġtext Ġ= Ġ{ ĠText ( text Ġ= Ġalbum Info . title . value , Ġmax Lines Ġ= Ġ 1 , Ġoverflow Ġ= ĠText Overflow . El lipsis ) Ġ}, ĊĠĠĠ Ġsecondary Text Ġ= Ġ{ ĠArtist And Song Count ( album Info Ġ= Ġalbum Info ) Ġ}, ĊĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠArtist And Song Count ( album Info : ĠAlbum Info ) Ġ{ ĊĠ ĠConstraint Layout ( modifier Ġ= ĠModifier . fill Max Width ()) Ġ{ ĊĠĠĠ Ġval Ġ( artist , Ġcount ) Ġ= Ġcreate Refs () ĊĠĠĠ ĠText ( ĊĠĠĠĠĠ Ġtext Ġ= Ġalbum Info . artist . value , ĊĠĠĠĠĠ Ġmax Lines Ġ= Ġ 1 , ĊĠĠĠĠĠ Ġoverflow Ġ= ĠText Overflow . El lipsis , ĊĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . constr ain As ( artist ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstart . link To ( parent . start ) ĊĠĠĠĠĠĠĠ Ġend . link To ( count . start ) ĊĠĠĠĠĠĠĠ Ġwidth Ġ= ĠDimension . fill To Constraints ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠĠĠ ĠText ( ĊĠĠĠĠĠ Ġtext Ġ= ĠLocal Context . current . resources . get Quantity String ( ĊĠĠĠĠĠĠĠ ĠR . plurals . Song Count , ĊĠĠĠĠĠĠĠ Ġalbum Info . song Count , ĊĠĠĠĠĠĠĠ Ġalbum Info . song Count , ĊĠĠĠĠĠ Ġ), ĊĠĠĠĠĠ Ġmax Lines Ġ= Ġ 1 , ĊĠĠĠĠĠ Ġoverflow Ġ= ĠText Overflow . El lipsis , ĊĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . constr ain As ( count ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstart . link To ( artist . end ) ĊĠĠĠĠĠĠĠ Ġend . link To ( parent . end ) ĊĠĠĠĠĠĠĠ Ġwidth Ġ= ĠDimension . wrap Content ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġinterface ĠAll Album s ViewModel Ġ{ ĊĠ Ġdata Ġclass ĠAlbum Info ( ĊĠĠĠ Ġval Ġid : ĠAlbum Id , ĊĠĠĠ Ġval Ġtitle : ĠAlbum Title , ĊĠĠĠ Ġval Ġart work : ĠUri , ĊĠĠĠ Ġval Ġartist : ĠArtist Name , ĊĠĠĠ Ġval Ġsong Count : ĠInt ĊĠ Ġ) ĊĊĠ Ġval Ġall Album s : ĠState Flow < List < Album Info >> ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġoperator Ġfun Ġinvoke ( album Dao : ĠAlbum Dao ): ĠAll Album s ViewModel Ġ= ĠAll Album s ViewModel Impl ( album Dao ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠAll Album s ViewModel Impl ( ĊĠ Ġprivate Ġval Ġalbum Dao : ĠAlbum Dao Ċ ) Ġ: ĠAll Album s ViewModel , ĠScoped Services . Activated Ġ{ ĊĠ Ġprivate Ġlateinit Ġvar Ġscope : ĠCor outine Scope ĊĊĠ Ġoverride Ġval Ġall Album s Ġ= ĠMutable State Flow < List < Album Info >>( emptyList ()) ĊĊĠ Ġoverride Ġfun Ġon Service Active () Ġ{ ĊĠĠĠ Ġscope Ġ= ĠCor outine Scope ( Job () Ġ+ ĠDispatch ers . Main ) ĊĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġalbum Dao . getAll Album s ( Long . MAX _ VALUE )) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠOk Ġ-> Ġhandle Album List ( result . value ) ĊĠĠĠĠĠĠĠ Ġis ĠErr Ġ-> ĠLOG ._ e Ġ{ Ġit ("% s ", Ġresult . error ) Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġhandle Album List ( list : ĠList < Album Description >) Ġ{ ĊĠĠĠ ĠLOG ._ e Ġ{ Ġit (" list . size =% d ", Ġlist . size ) Ġ} ĊĠĠĠ Ġall Album s . value Ġ= Ġlist . map To ( ArrayList ( list . size )) Ġ{ ĊĠĠĠĠĠ ĠAlbum Info ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġit . album Id , ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġit . album Title , ĊĠĠĠĠĠĠĠ Ġart work Ġ= Ġif Ġ( it . album Local Art Ġ!== ĠUri . EMPTY ) Ġit . album Local Art Ġelse Ġit . album Art , ĊĠĠĠĠĠĠĠ Ġartist Ġ= Ġit . artist Name , ĊĠĠĠĠĠĠĠ Ġsong Count Ġ= Ġit . song Count . toInt () ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Service Inactive () Ġ{ ĊĠĠĠ Ġscope . cancel () ĊĠĠĠ Ġall Album s . value Ġ= Ġempty List () ĊĠ Ġ} Ċ } Ċ