package Ġcom . n andra . mys ch ool . ui . class room _ detail Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . view pager . widget . ViewPager Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġcom . n andra . mys ch ool . R Ċ import Ġcom . n andra . mys ch ool . adapter . Class room Detail ViewPager Adapter Ċ import Ġcom . n andra . mys ch ool . ui . AddNew Channel Item Dialog Fragment Ċ import Ġcom . n andra . mys ch ool . ui . AddNew Session Dialog Fragment Ċ import Ġcom . n andra . mys ch ool . ui . Upload File Confirmation Dialog Fragment Ċ import Ġcom . n andra . mys ch ool . utils . Utility Ċ import Ġcom . n andra . mys ch ool . utils . Utility . I AddNew Channel Item Ċ import Ġcom . n andra . mys ch ool . utils . Utility . Data Load State Ċ import Ġcom . n andra . mys ch ool . utils . Utility . EXTRA _ SUBJECT _ CODE Ċ import Ġcom . n andra . mys ch ool . utils . Utility . EXTRA _ SUBJECT _ ID Ċ import Ġcom . n andra . mys ch ool . utils . Utility . EXTRA _ SUBJECT _ NAME Ċ import Ġcom . n andra . mys ch ool . utils . Utility . EXTRA _ USER _ ROLE Ċ import Ġcom . n andra . mys ch ool . utils . Utility . LOG _ DEBUG _ TAG Ċ import Ġkotlinx . android . synt hetic . main . class room _ detail _ activity .* Ċ Ċ class ĠClass room Detail Activity Ġ: ĠAppCompatActivity (), ĠI AddNew Channel Item Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclass room Detail ViewPager Adapter : ĠClass room Detail ViewPager Adapter ĊĠĠĠ Ġprivate Ġvar Ġsubject ID : ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġuser Role Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġsubject Code Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsubject Name : ĠString ĊĠĠĠ Ġprivate Ġval Ġclass room Detail ViewModel : ĠClass room Detail ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġval Ġfile Picker Request Ġ= Ġ 1 0 1 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . class room _ detail _ activity ) ĊĊĠĠĠĠĠĠĠ Ġsubject ID Ġ= Ġintent . getInt Extra ( EXTRA _ SUBJECT _ ID , Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġsubject Name Ġ= Ġintent . getString Extra ( EXTRA _ SUBJECT _ NAME ) Ġ?: Ġ" Class room ĠDetail " ĊĠĠĠĠĠĠĠ Ġuser Role Ġ= Ġintent . getString Extra ( EXTRA _ USER _ ROLE ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġsubject Code Ġ= Ġintent . getString Extra ( EXTRA _ SUBJECT _ CODE ) Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ Ġclass room Detail ViewModel . user Role Ġ= Ġuser Role ĊĠĠĠĠĠĠĠ Ġclass room Detail ViewModel . subject Code Ġ= Ġsubject Code ĊĊĠĠĠĠĠĠĠ Ġsetup View () ĊĠĠĠĠĠĠĠ Ġobserve ViewModel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cancel Button Clicked () Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon Send Button Clicked ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclass room Detail ViewModel . add New Item To Channel ( message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ViewPager () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġclass room Detail ViewPager Adapter Ġ= ĠClass room Detail ViewPager Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ tab _ layout . tab Count ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ view pager . adapter Ġ= Ġclass room Detail ViewPager Adapter ĊĊĠĠĠĠĠĠĠ Ġif Ġ( user Role Ġ== Ġ" user _ teacher ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ tab _ layout . add On Tab Selected Listener ( object Ġ: ĠTab Layout . On Tab Selected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Re selected ( tab : ĠTab Layout . Tab ?) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Un selected ( tab : ĠTab Layout . Tab ?) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Selected ( tab : ĠTab Layout . Tab ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ view pager . currentItem Ġ= Ġtab !!. position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ fab . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Fab Appearance ( tab . position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ fab . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ view pager . add On Page ChangeListener ( Tab Layout . Tab Layout On Page ChangeListener ( activity _ class room _ detail _ tab _ layout )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ view pager . add On Page ChangeListener ( object Ġ: ĠView Pager . Simple On Page ChangeListener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Scroll StateChanged ( state : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Pager . SCROLL _ STATE _ IDLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ fab . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Pager . SCROLL _ STATE _ DR AG GING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ fab . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ fab . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ tab _ layout . add On Tab Selected Listener ( object Ġ: ĠTab Layout . On Tab Selected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Re selected ( tab : ĠTab Layout . Tab ?) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Un selected ( tab : ĠTab Layout . Tab ?) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Selected ( tab : ĠTab Layout . Tab ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ view pager . currentItem Ġ= Ġtab !!. position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ view pager . add On Page ChangeListener ( Tab Layout . Tab Layout On Page ChangeListener ( activity _ class room _ detail _ tab _ layout )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Fab Appearance ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ Ġactivity _ class room _ detail _ fab . setImage Resource ( R . drawable . ic _ add _ new _ chat ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ Ġactivity _ class room _ detail _ fab . setImage Resource ( R . drawable . ic _ cloud _ upload ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ Ġactivity _ class room _ detail _ fab . setImage Resource ( R . drawable . ic _ add )} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( activity _ class room _ detail _ toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Display Show Home Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Display Show Title Enabled ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ toolbar . set Navigation Icon ( R . drawable . ic _ arrow _ back ) ĊĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ toolbar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ toolbar _ title . text Ġ= Ġsubject Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Detail Load State ( state : ĠData Load State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Load State . UN LOADED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass room Detail ViewModel . get Detail Subject ( subject ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Load State . LOADING Ġ-> Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Load State . LOADED Ġ-> Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle On Fab Clicked ( tab Position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( tab Position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ AddNew Channel Item Dialog Fragment ( this ). show ( support FragmentManager , Ġ" AddNew Channel Item ")} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ OPEN _ DOCUMENT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Category ( Intent . CATEGORY _ OP ENABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ"* /* " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , Ġfile Picker Request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd New Session Dialog Fragment (). show ( support FragmentManager , Ġ" AddNew Session ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== Ġfile Picker Request Ġ&& ĠresultCode Ġ== ĠActivity . RESULT _ OK ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġdata ?. data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmime Ġ= ĠUtility . get MimeType From Uri ( application , Ġuri !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( LOG _ DEBUG _ TAG , Ġuri . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpload File Confirmation Dialog Fragment ( uri , Ġmime !! ). show ( support FragmentManager , Ġ" Upload Fragment ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Toolbar () ĊĠĠĠĠĠĠĠ Ġsetup ViewPager () ĊĠĠĠĠĠĠĠ Ġhandle Fab Appearance ( activity _ class room _ detail _ tab _ layout . selected Tab Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass room Detail ViewModel . detail Subject Data Load State . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Detail Load State ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġactivity _ class room _ detail _ fab . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle On Fab Clicked ( activity _ class room _ detail _ tab _ layout . selected Tab Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }