package Ġcom . dia f yt . l azar us . ui Ċ Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . net . Uri Ċ import Ġandroid . n fc . N fc Adapter Ċ import Ġandroid . n fc . Tag Ċ import Ġandroid . n fc . tech . N fc V Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġcom . dia f yt . l azar us .* Ċ import Ġcom . dia f yt . l azar us . utils . Exception Arch iv ist Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġcom . google . android . material . tabs . Tab Layout Mediator Ċ import Ġkotlin . math . min Ċ Ċ /** Ċ Ġ* ĠCentral Ġactivity Ġproviding Ġnearly Ġall Ġscreens . Ċ Ġ* Ċ Ġ* ĠThis Ġalso Ġhandles Ġthe ĠN FC Ġsetup . Ċ Ġ*/ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġkey Fragment Store Ġ= Ġ" fragment Store " ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmain Fragment State Adapter : ĠMain Fragment State Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview Pager : ĠView Pager 2 ĊĊĠĠĠ Ġ// Ġcon served Ġstate ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġactual Ġfragments Ġused Ġin Ġthe ĠView Pager , Ġwill Ġbe Ġupdated Ġby Ġthe ĠMain Fragment State Adapter . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġlateinit Ġvar Ġfragment Store : ĠHashMap < Int , ĠAbstract Main Fragment > ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġfragment Store Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") Ġval Ġserialized Store Ġ= Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState ?. get Serializable ( key Fragment Store ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġas ? ĠHashMap < Int , ĠString >) Ġ?: ĠHashMap () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġserialized Store . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserialized Store [ i ]?. let Ġ{ Ġtag Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . find Fragment By Tag ( tag )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Store [ i ] Ġ= Ġit Ġas ĠAbstract Main Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava Class . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Deserial ized Ġfragment Store : Ġfound Ġ" Ġ+ Ġfragment Store . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Ġof Ġ" Ġ+ Ġserialized Store . size ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ ĠException Arch iv ist . initialize ( get External Files Dir ( null )) ĊĠĠĠĠĠĠĠ Ġinit Fragments () ĊĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠN fc Adapter . getDefault Adapter ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button ( R . string . button _ title _ close ) Ġ{ Ġ_, Ġ_ Ġ-> Ġfinish () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( R . string . button _ title _ use _ any way ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( getString ( R . string . dialog _ title _ no _ n fc )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( R . string . message _ error _ n fc _ missing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! adapter . isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= ĠgetString ( R . string . sn ackbar _ error _ n fc _ disabled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( view Pager , Ġs , ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġup Ġthe ĠView Pager . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Fragments () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragments Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTutorial Fragment :: class , ĠProgramming Fragment :: class , ĠTemperature Fragment :: class ) ĊĊĠĠĠĠĠĠĠ Ġview Pager Ġ= ĠfindViewById ( R . id . pager ) ĊĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġif ( view Pager . adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġon Ġfirst Ġiteration Ġstart Ġon Ġthe Ġtemperature Ġscreen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragments . indexOf ( Temperature Fragment :: class ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġotherwise Ġkeep Ġthe Ġcurrent Ġscreen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin ( view Pager . currentItem , Ġfragments . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmain Fragment State Adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMain Fragment State Adapter ( this , Ġfragments ) ĊĠĠĠĠĠĠĠ Ġview Pager . adapter Ġ= Ġmain Fragment State Adapter ĊĠĠĠĠĠĠĠ Ġval Ġtab Layout : ĠTab Layout Ġ= ĠfindViewById ( R . id . tab _ layout ) ĊĠĠĠĠĠĠĠ Ġtab Layout . tab Mode Ġ= ĠTab Layout . MODE _ SCROLL ABLE ĊĠĠĠĠĠĠĠ ĠTab Layout Mediator ( tab Layout , Ġview Pager ) Ġ{ Ġtab , Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Store [ position ] Ġ?: Ġfragments [ position ]. construct ors . first (). call () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab . text Ġ= ĠgetString ( fragment . tab Title Key ) ĊĠĠĠĠĠĠĠ Ġ}. attach () ĊĠĠĠĠĠĠĠ Ġview Pager . setCurrent Item ( pos , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠQuery Ġwhich Ġfragment Ġis Ġcurrently Ġshown Ġby Ġthe ĠView Pager . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcurrent Fragment (): ĠAbstract Main Fragment ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfragment Store [ view Pager . currentItem ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater : ĠMenu Inflater Ġ= Ġmenu Inflater ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . main _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠN fc Adapter . getDefault Adapter ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( adapter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , Ġjava Class ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Flags ( Intent . FLAG _ ACTIVITY _ SINGLE _ TOP ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Intent Ġ= ĠPending Intent . getActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġ 0 , Ġintent , Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pending Intent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . enable Foreground Dispatch ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġpending Intent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Intent Filter ( N fc Adapter . ACTION _ TE CH _ DIS COVER ED )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( array Of ( N fc V :: class . java . name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( java Class . name , Ġ" N FC Ġforeground Ġdispatch Ġenabled .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava Class . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġpending Ġintent . ĠFore ground Ġdispatch Ġnot Ġinitialized .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( java Class . name , Ġ" No ĠN FC Ġadapter . ĠFore ground Ġdispatch Ġnot Ġinitialized .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ ĠN fc Adapter . getDefault Adapter ( this )?. disable Foreground Dispatch ( this ) ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġval Ġserial izable Store Ġ= ĠHashMap < Int , ĠString >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġfragment Store . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Store [ i ]?. let Ġ{ fragment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . tag ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserial izable Store [ i ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava Class . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Serialized Ġfragment Store : Ġfound Ġtags Ġfor Ġ" Ġ+ Ġserial izable Store . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Ġof Ġ" Ġ+ Ġfragment Store . size ) ĊĠĠĠĠĠĠĠ Ġout State . put Serializable ( key Fragment Store , Ġserial izable Store ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ open _ dia f yt _ website Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbrowser Intent Ġ= ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ VIEW , ĠUri . parse (" https :// www . dia f yt . com / ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( browser Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ open _ l azar us _ website Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠAbout Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon New Intent ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on New Intent ( intent ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( intent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠN fc Adapter . ACTION _ TE CH _ DIS COVER ED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġintent . get Parcelable Extra ( N fc Adapter . EXTRA _ TAG ) Ġas ? ĠTag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Fragment ()?. handle N fc ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( java Class . name , Ġ" N FC Ġtag Ġmissing .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ