package Ġcom . android . my application . movies . ui . detail . fragments Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mediator LiveData Ċ import Ġcom . android . my application . movies . models . get _ photo _ obj . Photos Ċ import Ġcom . android . my application . movies . models . read _ movies . Mov y Ċ import Ġcom . android . my application . movies . repository . Movie Detail Repository Ċ import Ġcom . android . my application . movies . util . Resource Ċ Ċ class ĠDetail Fragment ViewModel ( app : ĠApplication , Ġprivate Ġval Ġrepository : ĠMovie Detail Repository , Ġval Ġmovie : ĠMov y ) Ġ: ĠAndroid ViewModel ( app ) Ġ{ ĊĊĊĠĠĠ Ġprivate Ġval Ġ_ movie Details Ġ= ĠMed iator LiveData < Resource < Photos >>() ĊĠĠĠ Ġval Ġmovie Details : ĠLive Data < Resource < Photos >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ movie Details ĊĊĊĠĠĠ Ġprivate Ġvar Ġcancel Request Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Perform ing Query : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġget Movie Details ( page : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Perform ing Query ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Perform ing Query Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Request ( page ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute Request ( page : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepository Source Ġ= Ġrepository . get Movie Detail ( movie . title !! , Ġpage ) ĊĠĠĠĠĠĠĠ Ġregister Mediator LiveData ( repository Source ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister Mediator LiveData ( repository Source : ĠLive Data < Resource < Photos >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ movie Details . add Source ( repository Source ) Ġ{ Ġresource Movie Details Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cancel Request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resource Movie Details Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ movie Details . value Ġ= Ġresource Movie Details ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resource Movie Details Ġis ĠResource . Success Ġ|| Ġresource Movie Details Ġis ĠResource . Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġresponse Ġis Ġreached Ġerror Ġor Ġsuccess Ġ( no Ġmore Ġloading ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunregister Mediator LiveData ( repository Source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġresponse Ġis Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunregister Mediator LiveData ( repository Source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġrequest Ġis Ġcanceled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunregister Mediator LiveData ( repository Source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// unregister Ġwhen Ġwhole Ġresponse Ġis Ġnull Ġor Ġwhen Ġresponse Ġ== Success Ġor ĠError ĊĠĠĠ Ġprivate Ġfun Ġunregister Mediator LiveData ( repository Source : ĠLive Data < Resource < Photos >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Perform ing Query Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ_ movie Details . remove Source ( repository Source ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġcancel Request () Ġ{ ĊĠĠĠĠĠĠĠ Ġcancel Request Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ }