package Ġcom . not o . app . widget Ċ Ċ import Ġandroid . app widget . App Widget Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Remote Views Ċ import Ġandroid . widget . Remote Views Service Ċ import Ġcom . not o . app . App Activity Ċ import Ġcom . not o . app . R Ċ import Ġcom . not o . app . domain . model . Library Ċ import Ġcom . not o . app . domain . model . Library List Sorting Type Ċ import Ġcom . not o . app . domain . model . Sorting Order Ċ import Ġcom . not o . app . domain . repository . Library Repository Ċ import Ġcom . not o . app . domain . repository . Note Repository Ċ import Ġcom . not o . app . domain . source . LocalStorage Ċ import Ġcom . not o . app . util .* Ċ import Ġcom . not o . app . util . Constants . Widget . Notes Count Ċ import Ġkotlinx . coroutines . flow . combine Ċ import Ġkotlinx . coroutines . flow . filter NotNull Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . k oin . core . component . K oin Component Ċ import Ġorg . k oin . core . component . inject Ċ Ċ class ĠLibrary List Remote Views Factory ( private Ġval Ġcontext : ĠContext , Ġintent : ĠIntent ?) Ġ: ĠRemote Views Service . Remote Views Factory , ĠK oin Component Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlibrary Repository Ġby Ġinject < Library Repository >() ĊĠĠĠ Ġprivate Ġval Ġnote Repository Ġby Ġinject < Note Repository >() ĊĠĠĠ Ġprivate Ġval Ġstorage Ġby Ġinject < LocalStorage >() ĊĠĠĠ Ġprivate Ġval Ġapp Widget Id Ġ= Ġintent ?. getInt Extra ( App Widget Manager . EXTRA _ APP WIDGET _ ID , ĠApp Widget Manager . INVALID _ APP WIDGET _ ID ) ĊĠĠĠĠĠĠĠ Ġ?: ĠApp Widget Manager . INVALID _ APP WIDGET _ ID ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlibraries : ĠList < Pair < Library , ĠInt >> ĊĠĠĠ Ġprivate Ġvar Ġis Show Notes Count : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon DataSet Changed () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsorting Type Ġ= Ġstorage . get ( Constants . Library List Sorting Type Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠLibrary List Sorting Type . valueOf ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠ Ġval Ġsorting Order Ġ= Ġstorage . get ( Constants . Library List Sorting Order Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠSort ing Order . valueOf ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠ Ġlibraries Ġ= Ġlibrary Repository . get Libraries () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. combine ( note Repository . get Libraries Notes Count ()) Ġ{ Ġlibraries , Ġlibraries Notes Count Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibraries . map Ġ{ Ġlibrary Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotes Count Ġ= Ġlibraries Notes Count . first OrNull Ġ{ Ġit . library Id Ġ== Ġlibrary . id Ġ} ?. notes Count Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Ġto Ġnotes Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted ( sorting Type , Ġsorting Order ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Descending Ġ{ Ġit . first . is Pin ned Ġ} ĊĠĠĠĠĠĠĠ Ġis Show Notes Count Ġ= Ġstorage . get OrNull ( app Widget Id . Notes Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit ?. to Boolean () Ġ?: Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġget Count (): ĠInt Ġ= Ġlibraries . count () ĊĊĠĠĠ Ġoverride Ġfun Ġget View At ( position : ĠInt ): ĠRemote Views Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġlibraries [ position ] ĊĠĠĠĠĠĠĠ Ġval Ġlibrary Ġ= Ġentry . first ĊĠĠĠĠĠĠĠ Ġval Ġnotes Count Ġ= Ġentry . second ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġcontext . color Resource ( library . color . to Resource ()) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Constants . Intent . Action Open Library , Ġnull , Ġcontext , ĠApp Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Constants . Library Id , Ġlibrary . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġremote Views Ġ= ĠRemote Views ( context . packageName , ĠR . layout . widget _ library _ item ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotes Count Text Ġ= Ġcontext . plurals Resource ( R . plurals . notes _ count , Ġnotes Count , Ġnotes Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset TextView Text ( R . id . tv _ library _ notes _ count , Ġnotes Count Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClick Fill In Intent ( R . id . ll , Ġintent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Description ( R . id . ll , Ġlibrary . title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset View Visibility ( R . id . tv _ library _ notes _ count , Ġif Ġ( is Show Notes Count ) ĠView . VISIBLE Ġelse ĠView . GONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset TextView Text ( R . id . tv _ library _ title , Ġlibrary . title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset TextColor ( R . id . tv _ library _ title , Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset TextColor ( R . id . tv _ library _ notes _ count , Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Int ( R . id . iv _ library _ color , ĠSet Color Filter MethodName , Ġcolor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġremote Views ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Loading View (): ĠRemote Views ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġget ViewType Count (): ĠInt Ġ= Ġ 1 ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ= Ġlibraries [ position ]. first . id ĊĊĠĠĠ Ġoverride Ġfun Ġhas Stable Ids (): ĠBoolean Ġ= Ġtrue Ċ }