package Ġcom . android . d ars . base Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġbutter knife . B utter Kn ife Ċ import Ġd max . dialog . Sp ots Dialog Ċ import Ġjava . util .* Ċ Ċ open Ġclass ĠBase Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Tag Fragments : ĠArrayList < String > ĊĠĠĠ Ġprivate Ġvar Ġhave Toolbar : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Toolbar : ĠToolbar ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtv Title : ĠTextView ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġprogress Dialog : ĠSp ots Dialog ? Ġ= Ġnull ĊĊĠĠĠ Ġopen Ġfun ĠgetActivity Layout Res Id (): ĠInt Ġ= ĠR . layout . activity _ base ĊĊĠĠĠ Ġopen Ġfun Ġinitialize () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġinitialize () ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġm Tag Fragments Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ ĠsetContentView ( getActivity Layout Res Id ()) ĊĠĠĠĠĠĠĠ ĠB utter Kn ife . bind ( this ) ĊĠĠĠĠĠĠĠ Ġon View Created ( savedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġon View Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Fragment By Tag ( tag : ĠString ): ĠBase Fragment ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġsupport FragmentManager ?. find Fragment By Tag ( tag ) ĊĠĠĠĠĠĠĠ Ġif ( fragment Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment Ġas ĠBase Fragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetLast Tag Fragment (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m Tag Fragments . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Tag Fragments [ m Tag Fragments . size Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Toolbar ( tool Bar : ĠToolbar ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tool Bar Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Support ActionBar ( tool Bar ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Toolbar Ġ= Ġtool Bar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhave Toolbar Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Title Ġ= ĠfindViewById ( R . id . tv Title ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( support ActionBar Ġ!= Ġnull Ġ&& Ġhave Toolbar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Toolbar ( m Toolbar ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Toolbar ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( support ActionBar Ġ!= Ġnull Ġ&& Ġhave Toolbar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Toolbar ?. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetTitle ( title : ĠCharSequence ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . title Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . subtitle Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Title ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . text Ġ= Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġsupport FragmentManager . find Fragment By Tag ( getLast Tag Fragment ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġ!= Ġnull Ġ&& Ġfragment Ġis ĠBase Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġfragment Ġas ĠBase Fragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( menuItem : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( menuItem . itemId Ġ== Ġandroid . R . id . home ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Tag Fragments . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġsupport FragmentManager . find Fragment By Tag ( m Tag Fragments [ m Tag Fragments . size Ġ- Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġis ĠBase Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġfragment Ġas ĠBase Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( base . on Back Toolbar ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgo Back () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( menuItem ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Tag Fragments . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġsupport FragmentManager . find Fragment By Tag ( m Tag Fragments [ m Tag Fragments . size Ġ- Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġis ĠBase Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġfragment Ġas ĠBase Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( base . on Back Pressed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Tag Fragments . remove At ( m Tag Fragments . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġsetup Image Toolbar (@ Drawable Res Ġres Image : ĠInt , Ġenable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Home As Up Indicator ( res Image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Display Home As Up Enabled ( enable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġset Enable Back Toolbar ( enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Display Home As Up Enabled ( enable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Display Show Home Enabled ( enable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġpush Fragment ( dialog : ĠDialog Fragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġdialog . show ( transaction , Ġdialog . java Class . simple Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġreplace Fragment ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpush Fragment ( fragment , Ġadd Back Stack Ġ= Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġopen Ġfun Ġpush Fragment ( fragment : ĠFragment , Ġcontainer : ĠInt Ġ= ĠR . id . container , Ġadd Back Stack : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar arg Ġanimations : ĠInt Ġ= Ġint ArrayOf ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġfragment . java Class . simple Name ĊĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" FLOW ", Ġ" Activity : Ġ${ java Class . simple Name } Ġ-> ĠFragment : Ġ Ġ$ tag ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( add Back Stack Ġ&& Ġ( m Tag Fragments . size Ġ> Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . addTo Back Stack ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ( animations . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġtransaction . set Custom Animations ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . anim . push _ show _ in _ simple , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . anim . push _ hidden _ out _ simple , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġtransaction . set Custom Animations ( animations [ 0 ], Ġanimations [ 1 ], Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġtransaction . set Custom Animations ( animations [ 0 ], Ġanimations [ 1 ], Ġanimations [ 2 ], Ġanimations [ 3 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠRuntimeException (" Error Ġwith Ġanimations Ġtransaction ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtransaction . replace ( container , Ġfragment , Ġtag ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . commit () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtag ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Tag Fragments . size Ġ== Ġ 0 Ġ|| Ġadd Back Stack ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Tag Fragments . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m Tag Fragments . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Tag Fragments . set ( m Tag Fragments . size Ġ- Ġ 1 , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġgo Back ( number : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( number Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w (" Base ", Ġ" Invalid Ġnumber Ġback ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġnumber ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgo Back () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġgo Back () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Tag Fragments . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Tag Fragments . remove At ( m Tag Fragments . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . pop Back Stack Immediate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġshow Progress Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress Dialog . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog Ġ= ĠSp ots Dialog ( this , ĠgetString ( R . string . loading )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog ?. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġdismiss Progress Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress Dialog ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Dialog Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }