package Ġcom . irv an . movie ku . helpers Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . Fragment Transaction Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . irv an . movie ku . Build Config Ċ import Ġcom . irv an . movie ku . mv vm . models . Fragment Model Ċ import Ġcom . irv an . movie ku . mv vm . view . fragments . Detail Movie Fragment Ċ import Ġcom . irv an . movie ku . mv vm . view . fragments . Favorite Fragment Ċ import Ġcom . irv an . movie ku . mv vm . view . fragments . Home Fragment Ċ Ċ class ĠFragment Navigation Helper ( val Ġid Container : ĠInt , Ġval Ġactivity : ĠAppCompatActivity ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Fragment Navigation " ĊĊĠĠĠ Ġprivate Ġvar Ġfragment Tags : ĠMutable List < String > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġval Ġfragment Models : ĠMutable List < Fragment Model > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġfun Ġset Fragment Navigation ( fragment : ĠFragment , Ġtag : ĠString , Ġis C Le ar : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is C Le ar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Tags . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Tags Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( fragment Tags . indexOf ( tag ) Ġ== Ġ- 1 Ġ&& Ġ! fragment . is Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" set Fragment Navigation : Ġnot Ġadded Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction : ĠFragment Transaction Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . get Support FragmentManager (). beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . add ( id Container , Ġfragment , Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Tags . add ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Models . add ( Fragment Model ( fragment , Ġtag )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( fragment Tags . indexOf ( tag ) Ġ== Ġ- 1 Ġ&& Ġfragment . is Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" set Fragment Navigation : Ġadded Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Tags . add ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Models . add ( Fragment Model ( fragment , Ġtag )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" set Fragment Navigation : Ġsame Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Tag Ġ= Ġfragment Tags . indexOf ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġis ĠDetail Movie Fragment Ġ|| Ġfragment Ġis ĠF avorite Fragment Ġ|| Ġfragment Ġis ĠHome Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" set Fragment Navigation : Ġsame Ġspecific ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction : ĠFragment Transaction Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . support FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . add ( id Container , Ġfragment , Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . commit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Tags . remove At ( index Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Tags . add ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Models . remove At ( index Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Models . add ( Fragment Model ( fragment , Ġtag )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Tags . remove ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Tags . add ( tag ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Models . remove At ( index Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Models . add ( Fragment Model ( fragment , Ġtag )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Fragment Vis ibilities ( tag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Stack () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġfragment Tags . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" check Stack : Ġ${ i }. Ġ${ it }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Fragment Navigation With Clear Previous Stack ( fragment : ĠFragment , Ġtag : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Fragment Navigation ( fragment , Ġtag , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġback Stack Count : ĠInt Ġ= Ġfragment Tags . size ĊĠĠĠĠĠĠĠ Ġval Ġindex Previous Fragment Ġ= Ġback Stack Count Ġ- Ġ 2 ĊĠĠĠĠĠĠĠ Ġif Ġ( index Previous Fragment Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Tags . remove At ( index Previous Fragment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Fragment Vis ibilities ( tag name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġfragment Models . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag name Ġ== Ġfragment Models . get ( i ). tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction : ĠFragment Transaction Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . get Support FragmentManager (). beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Models . get ( i ). fragment ?. let Ġ{ Ġtransaction . show ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction : ĠFragment Transaction Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . get Support FragmentManager (). beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Models . get ( i ). fragment ?. let Ġ{ Ġtransaction . hide ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġback stack Fragment ( is MainActivity : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġback Stack Count Ġ= Ġfragment Tags . size ĊĠĠĠĠĠĠĠ Ġif Ġ( back Stack Count Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Top Tag Ġ= Ġback Stack Count Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Fragment Model Ġ= Ġfragment Models [ index Top Tag ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Fragment Tag Ġ= Ġfragment Tags [ index Top Tag ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Top Fragment Tag Ġ= Ġfragment Tags [ back Stack Count Ġ- Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" back stack Fragment : Ġ$ new Top Fragment Tag ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Fragment Vis ibilities ( new Top Fragment Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Tags . remove At ( index Top Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Models . remove At ( index Top Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Stack () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( back Stack Count Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Stack () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is MainActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ackbar : ĠSn ackbar Ġ= ĠSn ackbar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . findViewById ( android . R . id . content ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ap ak ah Ġing in Ġmen ut up Ġaplik asi Ġ?", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" T UT UP ", Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity . finish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Visibility Fragment (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġback Stack Count Ġ= Ġfragment Tags . size ĊĠĠĠĠĠĠĠ Ġval Ġindex Top Tag Ġ= Ġback Stack Count Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġfragment Tags [ index Top Tag ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcount Back st act (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfragment Tags . size ĊĠĠĠ Ġ} Ċ }