/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 6 ĠM Ga et an 8 9 Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġio . kol umb us . activity Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġio . kol umb us . Analyzer Ċ import Ġio . kol umb us . Build Config Ċ import Ġio . kol umb us . K ol umb us Ċ import Ġio . kol umb us . R Ċ import Ġio . kol umb us . adapter . Table Adapter Ċ import Ġio . kol umb us . extension . prett ify Ċ import Ġio . kol umb us . layout . Table LayoutManager Ċ import Ġio . realm . Realm Ċ import Ġio . realm . Realm ChangeListener Ċ import Ġio . realm . Realm Model Ċ import Ġio . realm . Realm Results Ċ Ċ class ĠTable Activity Ġ: ĠActivity (), ĠRealm ChangeListener < Realm Results < Realm Model >> Ġ{ Ċ ĉ private Ġvar Ġempty : ĠTextView ? Ġ= Ġnull Ċ ĉ private Ġvar Ġentries : ĠList < Realm Model >? Ġ= Ġnull Ċ ĉ private Ġval Ġrealm : ĠRealm Ġby Ġlazy Ġ{ ĠRealm . getDefaultInstance () Ġ} Ċ ĉ private Ġvar Ġre cyclerView : ĠRecyclerView ? Ġ= Ġnull Ċ ĉ private Ġvar Ġtable Class : ĠClass < out ĠRealm Model >? Ġ= Ġnull ĊĊ ĉ comp anion Ġobject Ġ{ Ċĉ ĉ private Ġval ĠEX TRA _ TABLE _ CLASS Ġ= ĠBuild Config . APPLICATION _ ID Ġ+ Ġ". extra . TABLE _ CLASS " ĊĊĉ ĉ fun Ġstart ( context : ĠContext , Ġtable : ĠClass < out ĠRealm Model > ?) Ġ{ Ċĉĉ ĉ this . start ( context , Ġtable , Ġnull ) Ċĉ ĉ } ĊĊĉ ĉ fun Ġ< T Ġ: ĠRealm Model > Ġstart ( context : ĠContext , Ġtable : ĠClass < out ĠT > ?, Ġitems : ĠArray < out ĠT > ?) Ġ{ Ċĉĉ ĉ val Ġintent Ġ= ĠIntent ( context , ĠTable Activity :: class . java ) Ċĉĉ ĉ intent . putExtra ( EXTRA _ TABLE _ CLASS , Ġtable ) ĊĊĉĉ ĉ if Ġ( items Ġ!= Ġnull ) Ġ{ Ċĉĉĉ ĉ K ol umb us . items . addAll ( items ) Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ K ol umb us . items . clear () Ċĉĉ ĉ } ĊĊĉĉ ĉ context . startActivity ( intent ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun ĠonChange ( objects : ĠRealm Results < Realm Model >) Ġ{ Ċĉ ĉ this . display Table Content () Ċ ĉ } ĊĊ ĉ override Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ Ċĉ ĉ super . onCreate ( savedInstanceState ) ĊĊĉ ĉ this . set ContentView ( R . layout . kol umb us _ activity _ table ) ĊĊĉ ĉ if Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . H ONE Y COMB ) Ġ{ Ċĉĉ ĉ this . action Bar ?. set Display Home As Up Enabled ( true ) Ċĉ ĉ } ĊĊĉ ĉ this . empty Ġ= Ġthis . findViewById ( android . R . id . empty ) Ġas ĠTextView Ċĉ ĉ this . re cyclerView Ġ= Ġthis . findViewById ( android . R . id . list ) Ġas ĠRecyclerView Ċĉ ĉ this . table Class Ġ= Ġthis . intent . get Serializable Extra ( EXTRA _ TABLE _ CLASS ) Ġas ĠClass < out ĠRealm Model > Ċĉ ĉ this . title Ġ= Ġthis . table Class ?. simple Name ?. prett ify () Ġ?: Ġ"" ĊĊĉ ĉ this . re cyclerView ?. layout Manager Ġ= ĠTable LayoutManager ( this ) ĊĊĉ ĉ if Ġ( K ol umb us . items . isNotEmpty ()) Ġ{ Ċĉĉ ĉ this . entries Ġ= ĠK ol umb us . items . toList () ĊĊĉĉ ĉ this . display Table Content () ĊĊĉĉ ĉ K ol umb us . items . clear () Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ this . entries Ġ= Ġthis . realm . where ( this . table Class ). findAll Async () ĊĊĉĉ ĉ ( this . entries Ġas ĠRealm Results ). add ChangeListener ( this ) Ċĉ ĉ } ĊĊĉ ĉ if Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . H ONE Y COMB ) Ġ{ Ċĉĉ ĉ this . invalidate Options Menu () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ Ċĉ ĉ this . menu Inflater . inflate ( R . menu . kol umb us _ table , Ġmenu ) ĊĊĉ ĉ val Ġcount Ġ= Ġthis . realm . where ( this . table Class ). count () ĊĊĉ ĉ menu ?. find Item ( R . id . menu _ clear _ table )?. isVisible Ġ= Ġcount Ġ> Ġ 0 Ċĉ ĉ menu ?. find Item ( R . id . menu _ view _ all )?. isVisible Ġ= Ġcount Ġ- Ġ( this . entries ?. size Ġ?: Ġ 0 ) Ġ> Ġ 0 ĊĊĉ ĉ return Ġtrue Ċ ĉ } ĊĊ ĉ override Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ Ċĉ ĉ if Ġ( item ?. itemId Ġ== Ġandroid . R . id . home ) Ġ{ Ċĉĉ ĉ this . on Back Pressed () ĊĊĉĉ ĉ return Ġtrue Ċĉ ĉ } ĊĊĉ ĉ if Ġ( item ?. itemId Ġ== ĠR . id . menu _ clear _ table ) Ġ{ Ċĉĉ ĉ AlertDialog . Builder ( this ) Ċĉĉĉĉ ĉ . setMessage ( this . getString ( R . string . kol umb us _ clear _ table _ confirm , Ġthis . table Class ?. simple Name )) Ċĉĉĉĉ ĉ . set Positive Button ( R . string . kol umb us _ clear , Ġ{ Ġ_, Ġ_ Ġ-> Ċĉĉĉĉĉ ĉ realm . execute Transaction Ġ{ Ċĉĉĉĉĉĉ ĉ it . delete ( table Class ) Ċĉĉĉĉĉ ĉ } ĊĊĉĉĉĉĉ ĉ this . display Table Content () ĊĊĉĉĉĉĉ ĉ if Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . H ONE Y COMB ) Ġ{ Ċĉĉĉĉĉĉ ĉ this . invalidate Options Menu () Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ }) Ċĉĉĉĉ ĉ . set Negative Button ( android . R . string . cancel , Ġnull ) Ċĉĉĉĉ ĉ . show () ĊĊĉĉ ĉ return Ġtrue Ċĉ ĉ } ĊĊĉ ĉ if Ġ( item ?. itemId Ġ== ĠR . id . menu _ table _ info ) Ġ{ Ċĉĉ ĉ Table Info Activity . start ( this , Ġthis . table Class ) ĊĊĉĉ ĉ return Ġtrue Ċĉ ĉ } ĊĊĉ ĉ if Ġ( item ?. itemId Ġ== ĠR . id . menu _ view _ all ) Ġ{ Ċĉĉ ĉ Table Activity . start ( this , Ġthis . table Class ) ĊĊĉĉ ĉ return Ġtrue Ċĉ ĉ } ĊĊĉ ĉ return Ġsuper . on Options ItemSelected ( item ) Ċ ĉ } ĊĊ ĉ override Ġfun Ġon Stop () Ġ{ Ċĉ ĉ if Ġ( this . entries Ġis ĠRealm Results <* >) Ġ{ Ċĉĉ ĉ val Ġentries Ġ= Ġthis . entries Ġas ĠRealm Results < *> ĊĊĉĉ ĉ if Ġ( entries . isValid ) Ġ{ Ċĉĉĉ ĉ entries . removeAll Change Listeners () Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ this . realm . close () ĊĊĉ ĉ super . on Stop () Ċ ĉ } ĊĊ ĉ private Ġfun Ġdisplay Table Content () Ġ{ Ċĉ ĉ if Ġ( this . entries ?. size Ġ?: Ġ 0 Ġ== Ġ 0 ) Ġ{ Ċĉĉ ĉ this . empty ?. visibility Ġ= ĠView . VISIBLE Ċĉĉ ĉ this . re cyclerView ?. visibility Ġ= ĠView . GONE ĊĊĉĉ ĉ return Ċĉ ĉ } ĊĊĉ ĉ val Ġfields Ġ= ĠAnalyzer . get Realm Fields ( this . table Class ) Ċĉ ĉ val Ġmethods Ġ= ĠAnalyzer . get Accessors ( this . table Class , Ġfields ) ĊĊĉ ĉ this . empty ?. visibility Ġ= ĠView . GONE Ċĉ ĉ this . re cyclerView ?. adapter Ġ= ĠTable Adapter ( this . entries Ġ?: Ġempty List (), Ġfields , Ġmethods ) Ċĉ ĉ this . re cyclerView ?. visibility Ġ= ĠView . VISIBLE Ċ ĉ } Ċ } Ċ