package Ġcom . example . mov app . data Ċ Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġcom . example . mov app . ui . movies . Movie List Fragment Ċ import Ġjava . lang . Unsupported OperationException Ċ Ċ object ĠFragment Pager Data Ġ{ ĊĊĊĠĠĠ Ġprivate Ġval Ġfragment List Ġ= ĠlistOf < ViewPager Fragment Provider >( ĊĠĠĠĠĠĠĠ ĠMovie Fragment Provider ( Movie Fragment Type . FA VO UR ITES ), ĊĠĠĠĠĠĠĠ ĠMovie Fragment Provider ( Movie Fragment Type . ALL ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġget Movie Fragment Provider List (): ĠList < ViewPager Fragment Provider > Ġ= Ġfragment List ĊĊĠĠĠ Ġfun Ġget Movie List Repository (): ĠMovie List Repository { ĊĠĠĠĠĠĠĠ Ġreturn ĠI mdb Movie List Repository () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ interface ĠMovie List Repository { ĊĠĠĠ Ġfun Ġsearch For Movies ( search Expression : ĠString , Ġcallback : ĠCallback ) ĊĠĠĠ Ġfun ĠaddTo F avour ites ( list Item : ĠMovie ListItem ) ĊĠĠĠ Ġfun Ġremove From F avour ites ( list Item : ĠMovie ListItem ) ĊĠĠĠ Ġfun Ġget F avour ites LiveData (): ĠLive Data < List < Movie ListItem >> ĊĊĠĠĠ Ġinterface ĠCallback { ĊĠĠĠĠĠĠĠ Ġfun ĠonSuccess ( list : ĠList < Movie ListItem >) ĊĠĠĠĠĠĠĠ Ġfun ĠonError ( exception : ĠThrowable ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠView Pager Fragment Provider { ĊĠĠĠ Ġfun ĠgetName (): ĠString ĊĠĠĠ Ġfun Ġcreate Fragment (): ĠFragment Ċ } Ċ Ċ class ĠMovie Fragment Provider ( private Ġval Ġfragment Type : ĠMovie Fragment Type ): ĠView Pager Fragment Provider { ĊĠĠĠ Ġoverride Ġfun ĠgetName () Ġ= Ġfragment Type . tab Name ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Fragment (): ĠFragment Ġ= ĠMovie List Fragment . newInstance ( fragment Type ) Ċ } Ċ enum Ġclass ĠMovie Fragment Type ( val Ġtab Name : ĠString ) Ġ{ ĊĠĠĠ ĠF AV O UR ITES (" F avour ites "), ĠALL (" Search ĠMov ies "); ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Tab Name ( tab Name : ĠString ): ĠMovie Fragment Type { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen ( tab Name ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF AV O UR ITES . tab Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF AV O UR ITES ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠALL . tab Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠALL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException (" co ul dn 't Ġfind Ġenum Ġfor Ġtab name Ġ= Ġ$ tab Name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }