/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 . google . samples . apps . ios ched . ui . settings Ċ Ċ import Ġandroidx . h ilt . lifecycle . ViewModel Inject Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . live Data Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . google . samples . apps . ios ched . model . Theme Ċ import Ġcom . google . samples . apps . ios ched . shared . domain . prefs . Notifications Pref Save Action UseCase Ċ import Ġcom . google . samples . apps . ios ched . shared . domain . settings . Get Analytics Setting UseCase Ċ import Ġcom . google . samples . apps . ios ched . shared . domain . settings . Get Available Themes UseCase Ċ import Ġcom . google . samples . apps . ios ched . shared . domain . settings . Get Notifications Setting UseCase Ċ import Ġcom . google . samples . apps . ios ched . shared . domain . settings . Get Theme UseCase Ċ import Ġcom . google . samples . apps . ios ched . shared . domain . settings . Get TimeZone UseCase Ċ import Ġcom . google . samples . apps . ios ched . shared . domain . settings . Set Analytics Setting UseCase Ċ import Ġcom . google . samples . apps . ios ched . shared . domain . settings . Set Theme UseCase Ċ import Ġcom . google . samples . apps . ios ched . shared . domain . settings . Set TimeZone UseCase Ċ import Ġcom . google . samples . apps . ios ched . shared . result . Event Ċ import Ġcom . google . samples . apps . ios ched . shared . result . data Ċ import Ġcom . google . samples . apps . ios ched . shared . result . success Or Ċ import Ġcom . google . samples . apps . ios ched . shared . result . update On Success Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠSettings ViewModel Ġ@ ViewModel Inject Ġconstructor ( ĊĠĠĠ Ġval Ġset TimeZone UseCase : ĠSet TimeZone UseCase , ĊĠĠĠ Ġget TimeZone UseCase : ĠGet TimeZone UseCase , ĊĠĠĠ Ġval Ġnotifications Pref Save Action UseCase : ĠNotifications Pref Save Action UseCase , ĊĠĠĠ Ġget Notifications Setting UseCase : ĠGet Notifications Setting UseCase , ĊĠĠĠ Ġval Ġset Analytics Setting UseCase : ĠSet Analytics Setting UseCase , ĊĠĠĠ Ġget Analytics Setting UseCase : ĠGet Analytics Setting UseCase , ĊĠĠĠ Ġval Ġset Theme UseCase : ĠSet Theme UseCase , ĊĠĠĠ Ġget Theme UseCase : ĠGet Theme UseCase , ĊĠĠĠ Ġget Available Themes UseCase : ĠGet Available Themes UseCase Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġ// ĠTime ĠZone Ġsetting ĊĠĠĠ Ġprivate Ġval Ġ_ prefer Conference TimeZone Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġprefer Conference TimeZone : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ prefer Conference TimeZone ĊĊĠĠĠ Ġ// ĠNotifications Ġsetting ĊĠĠĠ Ġprivate Ġval Ġ_ enable Notifications Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġenable Notifications : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ enable Notifications ĊĊĠĠĠ Ġ// ĠAnalytics Ġsetting ĊĠĠĠ Ġprivate Ġval Ġ_ send Usage Statistics Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġsend Usage Statistics : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ send Usage Statistics ĊĊĠĠĠ Ġ// ĠTheme Ġsetting ĊĠĠĠ Ġval Ġtheme : ĠLive Data < Theme > Ġ= Ġlive Data Ġ{ ĊĠĠĠĠĠĠĠ Ġemit ( get Theme UseCase ( Unit ). success Or ( Theme . SYSTEM )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTheme Ġsetting ĊĠĠĠ Ġval Ġavailable Themes : ĠLive Data < List < Theme >> Ġ= Ġlive Data Ġ{ ĊĠĠĠĠĠĠĠ Ġemit ( get Available Themes UseCase ( Unit ). success Or ( emptyList ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ navigate To Theme Selector Ġ= ĠMutable LiveData < Event < Unit >>() ĊĠĠĠ Ġval Ġnavigate To Theme Selector : ĠLive Data < Event < Unit >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ navigate To Theme Selector ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠExec uting Ġuse Ġcases Ġin Ġparallel ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ prefer Conference TimeZone . value Ġ= Ġget TimeZone UseCase ( Unit ). data Ġ?: Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ send Usage Statistics . value Ġ= Ġget Analytics Setting UseCase ( Unit ). data Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ enable Notifications . value Ġ= Ġget Notifications Setting UseCase ( Unit ). data Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle TimeZone ( checked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset TimeZone UseCase ( checked ). update On Success (_ prefer Conference TimeZone ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle Send Usage Statistics ( checked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Analytics Setting UseCase ( checked ). update On Success (_ send Usage Statistics ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle Enable Notifications ( checked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotifications Pref Save Action UseCase ( checked ). update On Success (_ enable Notifications ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Theme ( theme : ĠTheme ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Theme UseCase ( theme ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Theme Setting Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ navigate To Theme Selector . value Ġ= ĠEvent ( Unit ) ĊĠĠĠ Ġ} Ċ } Ċ