package Ġcom . mol ik uner . m adb . ui . view model Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . mol ik uner . m adb . domain . use case . Get AD B State Ċ import Ġcom . mol ik uner . m adb . domain . use case . Toggle AD B State Ċ import Ġcom . mol ik uner . m adb . types . AD B State Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ class ĠA DB ViewModel Ġ{ ĊĠĠĠ Ġprivate Ġval Ġparent Job Ġ= ĠJob () ĊĠĠĠ Ġprivate Ġval Ġio Scope Ġ= ĠCor outine Scope ( Dispatch ers . Main Ġ+ Ġthis . parent Job ) ĊĠĠĠ Ġprivate Ġvar Ġupdate State Job : ĠJob ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġ_ state Ġ= ĠMutable LiveData < AD B State >() ĊĠĠĠ Ġval Ġstate : ĠLive Data < AD B State > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis ._ state ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . update () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . parent Job . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . update State Job ?. isActive Ġ== Ġtrue ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġupdate State Job Ġ= Ġthis . launch Update () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle State () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . update State Job ?. isActive Ġ== Ġtrue ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġupdate State Job Ġ= Ġthis . launch Toggle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlaunch Toggle () Ġ= Ġthis . io Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Request ing () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun Catch ing Ġ{ ĠToggle AD B State () Ġ} ĊĊĠĠĠĠĠĠĠ Ġshow Result ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlaunch Update () Ġ= Ġthis . io Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Request ing () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun Catch ing Ġ{ ĠGet AD B State () Ġ} ĊĊĠĠĠĠĠĠĠ Ġshow Result ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġshow Result ( adb : ĠResult < AD B State >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa db . get OrNull ()?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit Ui State ( adb Ġ= Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa db . exception OrNull ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" AD B ViewModel : ĠException ", Ġit . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġshow Request ing () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ Ġemit Ui State () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġemit Ui State ( adb : ĠA DB State ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Main ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ AD B ViewModel ._ state . value Ġ= Ġa db ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }