package Ġcom . e gor iku . lad y happy . settings . presentation Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . e gor iku . lad y happy . core . I Router Ċ import Ġcom . e gor iku . lad y happy . navigation . screen . Screen Ċ import Ġcom . e gor iku . lad y happy . settings . domain . model . Section Ċ import Ġcom . e gor iku . lad y happy . settings . domain . use case . I Authentication UseCase Ċ import Ġcom . e gor iku . lad y happy . settings . domain . use case . I Sections UseCase Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ class ĠSettings ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġrouter : ĠI Router , ĊĠĠĠ Ġprivate Ġval Ġsections UseCase : ĠI Sections UseCase , ĊĠĠĠ Ġprivate Ġval Ġauthentication UseCase : ĠI Authentication UseCase Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcache Ġ= ĠConcurrent HashMap < Int , ĠSection >() ĊĠĠĠ Ġprivate Ġval Ġ_ screen Data Ġ= ĠMutable LiveData < Map < Int , ĠSection >>() ĊĊĠĠĠ Ġval Ġscreen Data : ĠLive Data < Map < Int , ĠSection >> Ġ= Ġ_ screen Data ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsections UseCase . load (). collect Ġ{ Ġupdate Section ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthentication UseCase . subscribe Auth Events (). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Section ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlog Out () Ġ= Ġauthentication UseCase . logout () ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Section ( values : ĠSection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcache [ values . position ] Ġ= Ġvalues ĊĠĠĠĠĠĠĠ Ġcache . to Sorted Map ( compare By Ġ{ Ġit Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ_ screen Data . value Ġ= Ġcache ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnavigate To ( screen : ĠScreen ) Ġ= Ġrouter . add Screen Fullscreen ( screen ) ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsections UseCase . refresh (). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Section ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }