package Ġ` in `. dim igo . dim ig oin . ui . widget Ċ Ċ import Ġ` in `. dim igo . dim ig oin . R Ċ import Ġ` in `. dim igo . dim ig oin . data . use case . timetable . Time table UseCase Ċ import Ġ` in `. dim igo . dim ig oin . ui . item . Subject Item Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . widget . Remote Views Ċ import Ġandroid . widget . Remote Views Service Ċ import Ġandroidx . annotation . Attr Res Ċ import Ġandroidx . annotation . Color Int Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . cancel Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . k oin . android . ext . android . inject Ċ import Ġjava . time . DayOfWeek Ċ import Ġjava . time . LocalDateTime Ċ Ċ class ĠTime table Widget Service Ġ: ĠRemote Views Service () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtime table UseCase : ĠTime table UseCase Ġby Ġinject () ĊĊĠĠĠ Ġoverride Ġfun Ġon Get View Factory ( intent : ĠIntent ): ĠRemote Views Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTime table Remote Views Factory ( application Context , Ġtime table UseCase ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠTime table Remote Views Factory ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġtime table UseCase : ĠTime table UseCase Ċ ) Ġ: ĠRemote Views Service . Remote Views Factory Ġ{ ĊĠĠĠ Ġprivate Ġval Ġscope Ġ= ĠCor outine Scope ( Dispatch ers . IO ) ĊĠĠĠ Ġprivate Ġvar Ġtime table : ĠList < Subject Item ?> ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġget View At ( position : ĠInt ): ĠRemote Views Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠLocalDateTime . now () ĊĠĠĠĠĠĠĠ Ġif Ġ( timetable Ġ== Ġnull Ġ&& Ġposition Ġ== Ġ 0 ) Ġfetch Time table () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRemote Views ( context . packageName , ĠR . layout . item _ widget _ subject ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset TextView Text ( R . id . text _ subject , Ġtime table ?. get ( position )?. name Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DayOfWeek . from ( date ) Ġ== Ġtime table ?. get ( position )?. day OfWeek ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset TextColor ( R . id . text _ subject , Ġget Attribute Color ( context , ĠR . attr . color Primary )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset TextColor ( R . id . text _ subject , Ġget Attribute Color ( context , ĠR . attr . widget TextColor Disabled )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Time table () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġtime table UseCase . get Week ly Time table (). on Success Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime table Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime table Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon DataSet Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġtime table Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Loading View (): ĠRemote Views ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun Ġget Count () Ġ= Ġ 3 5 ĊĠĠĠ Ġoverride Ġfun Ġget ViewType Count () Ġ= Ġ 1 ĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġoverride Ġfun Ġhas Stable Ids () Ġ= Ġtrue ĊĊĠĠĠ Ġ@ Color Int ĊĠĠĠ Ġprivate Ġfun Ġget Attribute Color ( context : ĠContext , Ġ@ Attr Res Ġattribute Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtyped Value Ġ= ĠTyped Value () ĊĠĠĠĠĠĠĠ Ġcontext . set Theme ( R . style . Theme Overlay _ App _ Widget ) ĊĠĠĠĠĠĠĠ Ġcontext . theme . resolve Attribute ( attribute Id , Ġtyped Value , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtyped Value . data ĊĠĠĠ Ġ} Ċ } Ċ