package Ġcom . yes fer al . hor ns app . app . presentation . ui . settings Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . yes fer al . hor ns app . domain . use case . GetDefault Environment UseCase Ċ import Ġcom . yes fer al . hor ns app . domain . use case . Get Settings UseCase Ċ import Ġcom . yes fer al . hor ns app . domain . use case . Update Settings UseCase Ċ Ċ class ĠSettings ViewModel ( ĊĠĠĠ ĠgetDefault Environment UseCase : ĠGet Default Environment UseCase , ĊĠĠĠ Ġget Settings UseCase : ĠGet Settings UseCase , ĊĠĠĠ Ġprivate Ġval Ġupdate Settings UseCase : ĠUpdate Settings UseCase Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ state Ġ= ĠMutable LiveData < Settings State >() ĊĊĠĠĠ Ġval Ġstate : ĠLive Data < Settings State > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ state ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ state . value Ġ= ĠSettings State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment Ġ= ĠgetDefault Environment UseCase (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenvironments Ġ= Ġget Settings UseCase () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Spinner ItemSelected ( environment : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Settings UseCase . invoke ( environment ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSettings ViewModel Factory ( ĊĠĠĠ Ġprivate Ġval ĠgetDefault Environment UseCase : ĠGet Default Environment UseCase , ĊĠĠĠ Ġprivate Ġval Ġget Settings UseCase : ĠGet Settings UseCase , ĊĠĠĠ Ġprivate Ġval Ġupdate Settings UseCase : ĠUpdate Settings UseCase Ċ ) Ġ: ĠViewModel Provider . Factory Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmodel Class . get Constructor ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGet Default Environment UseCase :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGet Settings UseCase :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate Settings UseCase :: class . java ĊĠĠĠĠĠĠĠ Ġ). newInstance ( getDefault Environment UseCase , Ġget Settings UseCase , Ġupdate Settings UseCase ) ĊĠĠĠ Ġ} Ċ }