package Ġcom . design demo . u aha . view . detail Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . design demo . u aha . data . Info Database Ċ import Ġcom . design demo . u aha . data . model . detail . Detail Entity Ċ import Ġcom . design demo . u aha . data . model . detail . Detail Repository Ċ import Ġcom . design demo . u aha . data . model . product . Product Entity Ċ import Ġcom . design demo . u aha . data . model . product . Product Repository Ċ import Ġcom . design demo . u aha . net . F ono Api Factory Ċ import Ġcom . design demo . u aha . net . Wiki Api Factory Ċ import Ġcom . support . android . design lib demo . Build Config Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ import Ġkotlin . coroutines . Coroutine Context Ċ Ċ class ĠDetail ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ), ĠCor outine Scope Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġparent Job Ġ+ ĠDispatch ers . Main ĊĠĠĠ Ġprivate Ġvar Ġparent Job Ġ= ĠJob () ĊĊĠĠĠ Ġprivate Ġval Ġdetail Repository : ĠDetail Repository ĊĠĠĠ Ġprivate Ġval Ġprod Repository : ĠProduct Repository ĊĠĠĠ Ġprivate Ġval Ġall Details : ĠLive Data < List < Detail Entity >> ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= Ġ" Detail ViewModel " ĊĠĠĠĠĠĠĠ Ġ// ĠTo Ġuse Ġthe ĠF ON O ĠAPI , Ġyou Ġwill Ġneed Ġto Ġadd Ġyour Ġown ĠAPI Ġkey Ġto Ġthe Ġgradle . properties Ġfile ĊĠĠĠĠĠĠĠ Ġ// ĠApp Ġwill Ġde grade Ġgrace fully Ġif ĠKEY Ġis Ġnot Ġfound ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTOKEN Ġ= ĠBuild Config . F ON O _ API _ KEY ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdetail Item Dao Ġ= ĠInfo Database . get Database ( application , Ġthis ). detail Dao () ĊĠĠĠĠĠĠĠ Ġdetail Repository Ġ= ĠDetail Repository ( detail Item Dao ) ĊĊĠĠĠĠĠĠĠ Ġval Ġprod Item Dao Ġ= ĠInfo Database . get Database ( application , Ġthis ). product Dao () ĊĠĠĠĠĠĠĠ Ġprod Repository Ġ= ĠProduct Repository ( prod Item Dao ) ĊĊĠĠĠĠĠĠĠ Ġall Details Ġ= Ġdetail Repository . all Detail Info ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert Detail ( detail Item : ĠDetail Entity ) Ġ= Ġlaunch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdetail Repository . insert Detail Item ( detail Item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Product From Refresh ( product In : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct Ġ= Ġproduct In . split ("- ". to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġget F ono Net Info ( product [ 0 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget F ono Net Info ( product Key In : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠprogressBar Visibility . post Value ( true ) ĊĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproduct Ġ= Ġproduct Key In . split ("- ". to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠF ono Api Factory (). create (). getDevice ( TOKEN , Ġproduct [ 0 ], Ġproduct [ 1 ], Ġnull ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult List Ġ= Ġresult . body () !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdetail To Save Ġ= Ġresult List . last (). copy ( product Key Ġ= Ġproduct Key In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Detail ( detail To Save ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar Visibility . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar Visibility . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" D ang Ġwhat Ġis Ġthe Ġexception Ġ$ e ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Wiki Net Info ( query In : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠWiki Api Factory (). create (). get Wiki Response ( query In ). await () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwiki Item Ġ= Ġresult . body () !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" The Ġwiki Ġresponse Ġdid Ġreturn Ġ$ wiki Item ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" WI KI Ġresponse ĠD ID N ' T Ġwork ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" D ang ĠW IK I Ġresponse Ġwasn 't Ġright Ġ$ ex ", Ġex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert Fav ( product Entity : ĠProduct Entity ) Ġ= Ġlaunch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprod Repository . insert Item ( product Entity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Details For Item ( device Name : ĠString ): ĠLive Data < Detail Entity > Ġ= Ġdetail Repository . get Detail Item ( device Name ) ĊĊĠĠĠ Ġfun Ġget Product For Name ( device Name : ĠString ): ĠLive Data < Product Entity > Ġ= Ġprod Repository . get Product Item ( device Name ) ĊĊĠĠĠ Ġprivate Ġvar ĠprogressBar Visibility Ġ= ĠMutable LiveData < Boolean >() ĊĊĠĠĠ Ġfun Ġget ProgressBar Visibility () Ġ= ĠprogressBar Visibility ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ Ġparent Job . cancel () ĊĠĠĠ Ġ} Ċ } Ċ