package Ġcom . pm j . clean architecture . home Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . pm j . clean architecture . datastore . User Preferences Ċ import Ġcom . pm j . domain . model . D ining Ċ import Ġcom . pm j . domain . model . Output Ċ import Ġcom . pm j . domain . use case . D ining UseCase Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . Internal Cor outines Api Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠD ining ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġuse Case : ĠD ining UseCase , ĊĠĠĠ Ġprivate Ġval Ġuser Preferences : ĠUser Preferences Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ d ining List Ġ= ĠMutable LiveData < Output < List < D ining >> >() ĊĠĠĠ Ġval Ġd ining List : ĠLive Data < Output < List < D ining >>> Ġ= Ġ_ d ining List ĊĠĠĠ Ġprivate Ġval Ġ_ is Night Mode Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġis Night Mode : ĠLive Data < Boolean > Ġ= Ġ_ is Night Mode ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġto Ġfetch Ġthe Ġd ining Ġdata . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Opt In ( Internal Cor outines Api :: class ) ĊĠĠĠ Ġfun Ġfetch D ining () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Case . execute (). collect Ġ{ Ġd ining List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ d ining List . post Value ( d ining List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġto Ġget Ġcurrent Ġmode Ġof Ġtheme Ġfrom Ġpreferences Ġdata Ġstore ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Opt In ( Internal Cor outines Api :: class ) ĊĠĠĠ Ġfun ĠgetCurrent Mode () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Preferences . is Night Mode . collect Ġ{ Ġnight Mode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Night Mode . post Value ( night Mode Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġto Ġstore Ġuser Ġselected Ġmode Ġof Ġtheme Ġinto Ġpreferences Ġdata Ġstore ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtoggle Night Mode () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Night Mode . value ?. let Ġ{ Ġuser Preferences . toggle Night Mode (! it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }