package Ġcom . dev min a . d roid _ ant . get data . home Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . dev min a . d roid _ ant . get data . Y outube Api Status Ċ import Ġcom . dev min a . d roid _ ant . get data . data . Video Data Ċ import Ġcom . dev min a . d roid _ ant . get data . network . Network . get Video Data By Search Ċ import Ġcom . google . api . services . youtube . model . Search ListResponse Ċ import Ġkotlinx . coroutines .* Ċ import Ġtim ber . log . Tim ber ĊĊ Ċ class ĠHome ViewModel Ġ: ĠViewModel (){ ĊĊĊĠĠĠ Ġprivate Ġvar Ġ_ list Data = Mutable LiveData < Mutable List < Video Data >>() ĊĠĠĠ Ġval Ġlist Data : LiveData < Mutable List < Video Data >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ list Data ĊĊĠĠĠ Ġprivate Ġval Ġ_ navigate To Video Fragment Ġ= ĠMutable LiveData < Video Data >() ĊĠĠĠ Ġval Ġnavigate To Video Fragment : LiveData < Video Data > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ navigate To Video Fragment ĊĊĠĠĠ Ġprivate Ġval Ġ_ status Ġ= ĠMutable LiveData < Y outube Api Status >() ĊĠĠĠ Ġval Ġstatus : ĠLive Data < Y outube Api Status > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ status ĊĊĊĊĊĠĠĠ Ġ// ĠCreate Ġa ĠCor outine Ġscope Ġusing Ġa Ġjob Ġto Ġbe Ġable Ġto Ġcancel Ġwhen Ġneeded ĊĠĠĠ Ġprivate Ġvar ĠviewModel job = ĠJob () ĊĠĠĠ Ġ// Ġthe ĠCor outine Ġruns Ġusing Ġthe ĠMain Ġ( UI ) Ġdispatcher ĊĠĠĠ Ġprivate Ġvar Ġcour it ine Scope = ĠCor outine Scope ( viewModel job ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠ Ġcour it ine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . post Value ( Y outube Api Status . LOADING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . post Value ( Y outube Api Status . DONE ) ĊĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠThrowable ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . post Value ( Y outube Api Status . ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e . message . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠ Ġprivate Ġsuspend Ġfun Ġupdate () Ġ Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Video : ĠSearch ListResponse Ġ= Ġwith Context ( Dispatch ers . IO ){ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Video Data By Search () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlist : Mutable List < Video Data > Ġ= Ġmutable ListOf () ĊĊ ĊĠĠĠĠĠĠ Ġfor Ġ( video Ġin Ġlist Video . items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġif ( video . id . kind ==" youtube # video ") ĊĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Video Data ( video . id . video Id , video . snippet . title , video . snippet . thumb nails . medium . url )) ĊĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ_ list Data . post Value ( list ) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġdisplay Video Id ( video Data : ĠVideo Data ){ ĊĠĠĠĠĠĠĠĠĠ Ġ_ navigate To Video Fragment . post Value ( video Data ) ĊĠĠĠ Ġ} ĊĊĠĠĠĠ Ġfun Ġdisplay Video Data Completed (){ ĊĠĠĠĠĠĠĠĠ Ġ_ navigate To Video Fragment . post Value ( null ) ĊĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ ĠviewModel job . cancel () ĊĠĠĠ Ġ} ĊĊĊ Ċ } ĊĊĊ