package Ġinfo . infinite loops . j ge eks Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ Ċ import Ġandroidx . view pager . widget . Pager Adapter Ċ import Ġandroidx . view pager . widget . ViewPager Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġinfo . infinite loops . j ge eks . Utils . End less RecyclerView Scroll Listener Ċ Ċ import Ġjava . util . ArrayList Ċ Ċ import Ġinfo . infinite loops . j ge eks . Utils . Upload Post Ċ import Ġinfo . infinite loops . j ge eks . adapter . Re cycle Adapter Ċ import Ġinfo . infinite loops . j ge eks . models . Post Ċ import Ġinfo . infinite loops . library . nt b . Navigation TabBar Ċ import Ġinfo . infinite loops . j ge eks . network . Fire store Utils Ċ import Ġkotlinx . android . synt hetic . main . activity _ horizontal _ coordinator _ nt b .* Ċ import Ġandroid . content . Intent Ċ import Ġinfo . infinite loops . j ge eks . Utils . Utils Ċ import Ġinfo . infinite loops . j ge eks . network . Google Login Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġinfo . infinite loops . j ge eks . network . Session Manager Ċ import Ġkotlinx . android . synt hetic . main . login _ lo ayout . view .* Ċ import Ġorg . js oup . helper . StringUtil ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby ĠAs na Ġon Ġ 2 8 . 0 3 . 2 0 1 9 . Ċ Ġ*/ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġscroll Listener : ĠEnd less RecyclerView Scroll Listener ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth : ĠFirebase Auth ĊĠĠĠ Ġvar Ġcolors : ĠArray < String > Ġ= Ġempty Array () ĊĠĠĠ Ġvar Ġtab Names : ĠArray < String > Ġ= Ġempty Array () ĊĠĠĠ Ġvar Ġsess : ĠSession Manager ? Ġ= Ġnull ; ĊĠĠĠ Ġvar ĠstartTime Millis Ġ= Ġ" 1 5 7 7 7 5 0 4 0 0 0 0 0 " Ġ// Ġstart Ġdate Ġnew ĠDate (' 2 0 1 9 - 1 2 - 3 1 '). getTime () ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsess Ġ= ĠSession Manager ( this @ MainActivity ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ horizontal _ coordinator _ nt b ) ĊĠĠĠĠĠĠĠ Ġsetup Initial Data () ĊĠĠĠĠĠĠĠ Ġinit UI () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Initial Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġauth Ġ= ĠFirebase Auth . getInstance () ĊĠĠĠĠĠĠĠ Ġcolors Ġ= Ġresources . getString Array ( R . array . default _ preview ) ĊĠĠĠĠĠĠĠ Ġtab Names Ġ= Ġresources . getString Array ( R . array . tab _ names ) ĊĠĠĠĠĠĠĠ Ġif Ġ( sess !!. is LoggedIn Ġ&& Ġ! StringUtil . isBlank ( sess !!. email )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Names [ 0 ] Ġ= Ġsess !!. email ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġattach ViewPager Listener () ĊĊĠĠĠĠĠĠĠ Ġsetup Tabs () ĊĊĠĠĠĠĠĠĠ Ġfab !!. setOnClickListener Ġ{ ĠUpload Post . upload Alert ( this @ MainActivity , Ġvp _ horizontal _ nt b !!. currentItem ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġattach ViewPager Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġvp _ horizontal _ nt b !!. adapter Ġ= Ġobject Ġ: ĠP ager Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis View From Object ( view : ĠView , Ġ` object `: ĠAny ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview Ġ== Ġ` object ` ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdestroy Item ( container : ĠView , Ġposition : ĠInt , Ġ` object `: ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( container Ġas ĠView Pager ). remove View (` object ` Ġas ĠView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinstantiate Item ( container : ĠViewGroup , Ġposition : ĠInt ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġview Ġ= ĠLayoutInflater . from ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Context ). inflate ( R . layout . item _ vp _ list , Ġnull , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== Ġ 0 Ġ&& Ġ! sess !!. is LoggedIn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= ĠLayoutInflater . from ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Context ). inflate ( R . layout . login _ lo ayout , Ġnull , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . login . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGoogle Login ( this @ MainActivity ). login With gmail () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġini Re cy cker View ( view , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . addView ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġini Re cy cker View ( view : ĠView , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġre cyclerView Ġ= Ġview . findViewById < RecyclerView >( R . id . rv ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġlinear LayoutManager Ġ= ĠLinearLayoutManager ( base Context , ĠRecyclerView . VERTICAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= Ġlinear LayoutManager ĊĠĠĠĠĠĠĠ Ġval Ġfu Ġ= ĠFire store Utils () ĊĠĠĠĠĠĠĠ Ġval Ġarray List Ġ= ĠArrayList < Post >() ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠRe cycle Adapter ( this @ MainActivity , Ġarray List ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġfu . generate RV Data ( this @ MainActivity , Ġtab Names [ position ], Ġadapter , Ġarray List , ĠstartTime Millis ) ĊĊĠĠĠĠĠĠĠ Ġscroll Listener Ġ= Ġobject Ġ: ĠEnd less RecyclerView Scroll Listener ( linear LayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad More ( page : ĠInt , Ġtotal Items Count : ĠInt , Ġview : ĠRecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTrigger ed Ġonly Ġwhen Ġnew Ġdata Ġneeds Ġto Ġbe Ġappended Ġto Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġwhatever Ġcode Ġis Ġneeded Ġto Ġappend Ġnew Ġitems Ġto Ġthe Ġbottom Ġof Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Index Time Millis Ġ= Ġarray List [ array List . size Ġ- Ġ 1 ]. date millis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġ" Page : Ġ$ page : Ġ$ last Index Time Millis ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfu . generate RV Data ( this @ MainActivity , Ġtab Names [ position ], Ġadapter , Ġarray List , Ġlast Index Time Millis . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġre cyclerView . add On Scroll Listener ( scroll Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Tabs () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodels Ġ= ĠArrayList < Navigation TabBar . Model >() ĊĠĠĠĠĠĠĠ Ġmodels . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation TabBar . Model . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Drawable ( R . drawable . like ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ( colors [ 0 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( tab Names [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmodels . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation TabBar . Model . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Drawable ( R . drawable . js ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ( colors [ 1 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( tab Names [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmodels . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation TabBar . Model . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Drawable ( R . drawable . angular ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ( colors [ 2 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( tab Names [ 2 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmodels . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation TabBar . Model . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Drawable ( R . drawable . react ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ( colors [ 3 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( tab Names [ 3 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmodels . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation TabBar . Model . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Drawable ( R . drawable . vue w ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ( colors [ 4 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( tab Names [ 4 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmodels . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation TabBar . Model . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Drawable ( R . drawable . css ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ( colors [ 5 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( tab Names [ 5 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġn tb _ horizontal !!. models Ġ= Ġmodels ĊĠĠĠĠĠĠĠ Ġn tb _ horizontal !!. set ViewPager ( vp _ horizontal _ nt b , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ// IMPORTANT : ĠENABLE ĠSC ROLL ĠBE HAV IO UR ĠIN ĠCO ORD IN ATOR ĠLAY OUT ĊĠĠĠĠĠĠĠ Ġn tb _ horizontal !!. is Behavior Enabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġn tb _ horizontal !!. on TabBar SelectedIndex Listener Ġ= Ġobject Ġ: ĠNavigation TabBar . On TabBar SelectedIndex Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Tab Selected ( model : ĠNavigation TabBar . Model , Ġindex : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon End Tab Selected ( model : ĠNavigation TabBar . Model , Ġindex : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . hide Badge () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġn tb _ horizontal !!. setOn Page ChangeListener ( object Ġ: ĠView Pager . On Page ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Sc rolled ( position : ĠInt , Ġposition Offset : ĠFloat , Ġposition Offset Pixels : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Selected ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Scroll StateChanged ( state : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠUtils . RC _ SIGN _ IN ) ĠGoogle Login ( this @ MainActivity ). firebase Auth With Google ( auth , Ġdata !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġuser Ġis Ġsigned Ġin Ġ( non - null ) Ġand Ġupdate ĠUI Ġaccordingly . ĊĠĠĠĠĠĠĠ Ġval ĠcurrentUser Ġ= Ġauth . currentUser ĊĠĠĠĠĠĠĠ Ġif Ġ( currentUser Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSession Manager ( this @ MainActivity ). create Login Session ( currentUser !!. email !! , ĠcurrentUser . uid , ĠcurrentUser . displayName !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġ" Already ĠLogin ", ĠToast . LENGTH _ LONG ). show (); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ