package Ġmo e . linux . boilerplate . view . activity Ċ Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . databinding . Data Binding Util Ċ import Ġandroid . media . Audio Manager Ċ import Ġandroid . media . Sound Pool Ċ import Ġandroid . n fc . N fc Adapter Ċ import Ġandroid . n fc . tech . N fc F Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . V ibr ator Ċ import Ġandroid . support . annotation . Id Res Ċ import Ġandroid . support . annotation . String Res Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . support . v 4 . app . Fragment Transaction Ċ import Ġandroid . support . v 4 . view . Gravity Compat Ċ import Ġandroid . support . v 7 . app . ActionBar Drawer Toggle Ċ import Ġandroid . widget . Toast Ċ import Ġio . reactivex . Observable Ċ import Ġmo e . linux . boilerplate . R Ċ import Ġmo e . linux . boilerplate . api . N fc Read Util Ċ import Ġmo e . linux . boilerplate . api . github . Github ApiClient Ċ import Ġmo e . linux . boilerplate . api . qi ita . Qi ita ApiClient Ċ import Ġmo e . linux . boilerplate . databinding . Activity Main Binding Ċ import Ġmo e . linux . boilerplate . view . fragment . Base Fragment Ċ import Ġmo e . linux . boilerplate . view . fragment . Detail Fragment Ċ import Ġmo e . linux . boilerplate . view . fragment . Front Fragment Ċ import Ġmo e . linux . boilerplate . view . fragment . Qi ita List Fragment Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . lang . Exception Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠMainActivity Ġ: ĠBase Activity () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġbinding : ĠActivity Main Binding ĊĊĠĠĠ Ġval Ġn fc Read Util Ġ= ĠN fc Read Util () ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġclient : ĠGithub ApiClient ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġq i ita Client : ĠQ i ita ApiClient ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġvi br ator : ĠV ibr ator ĊĊĠĠĠ Ġlateinit Ġvar Ġon StateChange : ĠObservable < Page > ĊĊĠĠĠ Ġval Ġfront Fragment : ĠFront Fragment Ġby Ġlazy Fragment ( Front Fragment . TAG , Ġ{ ĠFront Fragment . newInstance () Ġ}) ĊĊĠĠĠ Ġval Ġq i ita List Fragment : ĠQ i ita List Fragment Ġby Ġlazy Fragment ( Qi ita List Fragment . TAG , Ġ{ ĠQ i ita List Fragment . newInstance () Ġ}) ĊĊĠĠĠ Ġval Ġdetail Fragment : ĠDetail Fragment Ġby Ġlazy Fragment ( Detail Fragment . TAG , Ġ{ ĠDetail Fragment . newInstance () Ġ}) ĊĊĠĠĠ Ġval Ġhandler Ġ= ĠHandler () ĊĊĠĠĠ Ġval Ġn fc Adapter : ĠN fc Adapter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠN fc Adapter . getDefault Adapter ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Reader Mode ( this @ MainActivity , Ġ{ Ġtag Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" rec ieve Ġthe Ġcard : Ġ${ tag . id }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġread Tag Ġ= Ġn fc Read Util . read Tag ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d ( read Tag . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġ" name Ġ: Ġ${ read Tag . name }\ n number : Ġ${ read Tag . number }", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsound Pool . play ( gate Success , Ġ 1 F , Ġ 1 F , Ġ 0 , Ġ 0 , Ġ 1 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvi br ator . vi br ate ( 2 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Fragment ( detail Fragment , ĠDetail Fragment . TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetail Fragment . viewModel . student Card Ġ= Ġread Tag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġ" èªŃãģ¿ åıĸ ãĤĬ ãģ« å¤± æķ Ĺ ãģĹãģ¾ãģĹãģŁ ãĢĤ \ n ${ e . message }", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsound Pool . play ( gate Failed , Ġ 1 F , Ġ 1 F , Ġ 0 , Ġ 0 , Ġ 1 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN fc Adapter . FLAG _ READ ER _ N FC _ F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠN fc Adapter . FLAG _ READ ER _ NO _ PLATFORM _ SO UN DS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġpending Intent Ġby Ġlazy Ġ{ ĠPending Intent . getActivity ( this , Ġ 0 , ĠIntent ( this , Ġjava Class ). add Flags ( Intent . FLAG _ ACTIVITY _ SINGLE _ TOP ), Ġ 0 ) Ġ} ĊĊĠĠĠ Ġval Ġintent Filter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Filter ( N fc Adapter . ACTION _ N DEF _ DIS COVER ED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġadd DataType (" text / plain ") Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsound Pool Ġby Ġlazy Ġ{ ĠSound Pool ( 1 , ĠAudio Manager . STREAM _ M US IC , Ġ 0 ) Ġ} ĊĠĠĠ Ġvar Ġgate Success Ġ= Ġ- 1 ĊĠĠĠ Ġvar Ġgate Failed Ġ= Ġ- 1 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġactivity Component . inject To ( this ) ĊĊĠĠĠĠĠĠĠ Ġgate Success Ġ= Ġsound Pool . load ( this , ĠR . raw . gate _ success , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġgate Failed Ġ= Ġsound Pool . load ( this , ĠR . raw . gate _ failed , Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠ Ġinit Fragment ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġon StateChange . subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . Page . FRONT Ġ-> Ġfront Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . Page . Detail Ġ-> Ġdetail Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . Page . Qi ita Ġ-> Ġq i ita List Fragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Fragment ( this , Ġthis . TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . set ContentView ( this , ĠR . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtoggle Ġ= ĠAction Bar Drawer Toggle ( this , Ġbinding . drawer , Ġbinding . toolbar , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . navigation _ drawer _ open , ĠR . string . navigation _ drawer _ close ) ĊĊĠĠĠĠĠĠĠ Ġbinding . drawer . add Drawer Listener ( toggle ) ĊĠĠĠĠĠĠĠ Ġtoggle . sync State () ĊĊĠĠĠĠĠĠĠ Ġon StateChange Ġ= ĠObservable . merge < Page >( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . create < Page > Ġ{ Ġsubscribe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . nav View . set Navigation ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe . onNext ( Page . parse With Id ( it . itemId )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . drawer . close Drawer ( Gravity Compat . START ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . create < Page > Ġ{ Ġsubscribe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bottom Menu . setOn Navigation ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe . onNext ( Page . parse With Id ( it . itemId )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. publish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ref Count () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Fragment ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Fragment ( front Fragment , ĠFront Fragment . TAG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ ĠTim ber . d (" start Ġn fc Ġscanning ") ĊĠĠĠĠĠĠĠ Ġn fc Adapter . enable Foreground Dispatch ( this , Ġpending Intent , Ġintent Filter , ĠarrayOf ( array Of ( N fc F :: class . java . name ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ ĠTim ber . d (" stop Ġn fc Ġscanning ") ĊĠĠĠĠĠĠĠ Ġn fc Adapter . disable Foreground Dispatch ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġsound Pool . release () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon New Intent ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on New Intent ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġfragment Ġback stack ãĤĤ èĢĥ æħ ® ãģĻãĤĭ ãĤĪãģĨãģ« å¤īæĽ´ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" back stack Ġcount : Ġ${ support FragmentManager . back Stack Entry Count }") ĊĠĠĠĠĠĠĠ Ġif Ġ( binding . drawer . is Drawer Open ( Gravity Compat . START )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . drawer . close Drawer ( Gravity Compat . START ) ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( switch Fragment ( front Fragment , ĠFront Fragment . TAG )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" back Ġto Ġfront Ġpage ") ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĊĠĠĠĠĠĠĠ Ġupdate View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġswitch Fragment ( fragment : ĠFragment , Ġtag : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fragment . is Added ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġsupport FragmentManager ĊĊĠĠĠĠĠĠĠ Ġmanager . beginTransaction (). also Ġ{ Ġft Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Fragment : ĠFragment ? Ġ= Ġsupport FragmentManager . find Fragment ById ( R . id . content Frame ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Fragment Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġft . detach ( current Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fragment . is Detached ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġft . attach ( fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġft . add ( R . id . content Frame , Ġfragment , Ġtag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Transition ( Fragment Transaction . TRANS IT _ FRAGMENT _ FA DE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĊĠĠĠĠĠĠĠ Ġmanager . execute Pending Transactions () ĊĊĠĠĠĠĠĠĠ Ġupdate View () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate View () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Fragment : ĠFragment ? Ġ= Ġsupport FragmentManager . find Fragment ById ( R . id . content Frame ) ĊĠĠĠĠĠĠĠ Ġif Ġ( current Fragment Ġis ĠBase Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Fragment . getPage (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . toolbar . title Ġ= ĠgetString ( it . title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . nav View . menu ?. find Item ( it . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . nav View . menu ?. set Group Check able ( R . id . main Menu , Ġfalse , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bottom Menu . menu . find Item ( it . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bottom Menu . menu . set Group Check able ( R . id . main Menu , Ġfalse , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠPage (@ Id Res Ġval Ġid : ĠInt , Ġ@ String Res Ġval Ġtitle : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFR ONT ( R . id . nav Home , ĠR . string . app _ name ), Ġ// Ġother Ġpage ĊĠĠĠĠĠĠĠ ĠDetail ( R . id . nav Detail , ĠR . string . menu _ detail ), ĊĠĠĠĠĠĠĠ ĠQ i ita ( R . id . nav Qi ita , ĠR . string . menu _ qi ita ), ĊĠĠĠĠĠĠĠ Ġ; ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġparse With Id ( id : ĠInt ): ĠPage Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalues (). find Ġ{ Ġit . id Ġ== Ġid Ġ} Ġ?: ĠFR ONT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠFragment > Ġlazy Fragment ( tag : ĠString , Ġnon : Ġ() Ġ-> ĠT ): ĠLazy < T > Ġ= ĊĠĠĠĠĠĠĠ Ġlazy Ġ{ Ġsupport FragmentManager . find Fragment By Tag ( tag ) Ġas ? ĠT Ġ?: Ġnon () Ġ} Ċ } Ċ