/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 Ġ- Ġpresent ĠIn structure , ĠInc . Ċ Ġ* Ċ Ġ* ĠĠĠĠ ĠThis Ġprogram Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ċ Ġ* ĠĠĠĠ Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby Ċ Ġ* ĠĠĠĠ Ġthe ĠFree ĠSoftware ĠFoundation , Ġversion Ġ 3 Ġof Ġthe ĠLicense . Ċ Ġ* Ċ Ġ* ĠĠĠĠ ĠThis Ġprogram Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ċ Ġ* ĠĠĠĠ Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof Ċ Ġ* ĠĠĠĠ ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe Ċ Ġ* ĠĠĠĠ ĠGNU ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* ĠĠĠĠ ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ċ Ġ* ĠĠĠĠ Ġalong Ġwith Ġthis Ġprogram . Ġ ĠIf Ġnot , Ġsee Ġ< http :// www . gnu . org / licenses />. Ċ Ġ* Ċ Ġ*/ Ċ package Ġcom . in structure . student . mob ius . sy ll ab us . ui Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġcom . in structure . canvas api 2 . models . Assignment Ċ import Ġcom . in structure . canvas api 2 . models . Canvas Context Ċ import Ġcom . in structure . canvas api 2 . models . Schedule Item Ċ import Ġcom . in structure . canvas api 2 . utils . exhaustive Ċ import Ġcom . in structure . p anda utils . utils .* Ċ import Ġcom . in structure . student . R Ċ import Ġcom . in structure . student . fragment . Calendar Event Fragment Ċ import Ġcom . in structure . student . mob ius . assignment Details . ui . Assignment Details Fragment Ċ import Ġcom . in structure . student . mob ius . common . ui . Mob ius View Ċ import Ġcom . in structure . student . mob ius . sy ll ab us . Sy ll ab us Event Ċ import Ġcom . in structure . student . router . Route Matcher Ċ import Ġcom . in structure . student . view . Empty View Ċ import Ġcom . spotify . mob ius . functions . Consumer Ċ import Ġkotlinx . android . synt hetic . main . fragment _ sy ll ab us .* Ċ import Ġkotlinx . android . synt hetic . main . fragment _ sy ll ab us _ events .* Ċ import Ġkotlinx . android . synt hetic . main . fragment _ sy ll ab us _ webview .* Ċ Ċ class ĠS yll ab us View ( val Ġcanvas Context : ĠCanvas Context , Ġinflater : ĠLayoutInflater , Ġparent : ĠViewGroup ) Ġ: ĊĠĠĠ ĠMob ius View < Sy ll ab us ViewState , ĠS yll ab us Event >( R . layout . fragment _ sy ll ab us , Ġinflater , Ġparent ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtab Listener Ġ= Ġobject Ġ: ĠTab Layout . Base On Tab Selected Listener < Tab Layout . Tab > Ġ{ ĊĠĠĠĠĠĠĠ Ġ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 ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tab ?. position Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . set Swipe able Children ( R . id . sy ll ab us WebView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . set Swipe able Children ( R . id . sy ll ab us Events Recycler , ĠR . id . sy ll ab us Empty View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtoolbar . setup As Back Button Ġ{ Ġ( context Ġas ? ĠActivity )?. on Back Pressed () Ġ} ĊĠĠĠĠĠĠĠ Ġtoolbar . title Ġ= Ġcontext . getString ( com . in structure . pand ares . R . string . sy ll ab us ) ĊĠĠĠĠĠĠĠ Ġtoolbar . subtitle Ġ= Ġcanvas Context . name ĊĊĠĠĠĠĠĠĠ Ġsy ll ab us Pager . adapter Ġ= ĠS yll ab us Tab Adapter ( canvas Context , Ġget Tab Titles ()) ĊĠĠĠĠĠĠĠ Ġsy ll ab us Tab Layout . setup With ViewPager ( sy ll ab us Pager , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġapply Theme () Ġ{ ĊĠĠĠĠĠĠĠ ĠView St y ler . theme Toolbar ( context Ġas ĠActivity , Ġtoolbar , Ġcanvas Context ) ĊĠĠĠĠĠĠĠ Ġsy ll ab us Tab Layout . set BackgroundColor ( Color Keeper . get Or Generate Color ( canvas Context )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Connect ( output : ĠConsumer < Sy ll ab us Event >) Ġ{ ĊĠĠĠĠĠĠĠ Ġswipe Refresh Layout . setOn Refresh Listener Ġ{ Ġoutput . accept ( Sy ll ab us Event . Pull To Refresh ) Ġ} ĊĠĠĠĠĠĠĠ Ġsy ll ab us Tab Layout . add On Tab Selected Listener ( tab Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Dispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġsy ll ab us Tab Layout . remove On Tab Selected Listener ( tab Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender ( state : ĠS yll ab us ViewState ) Ġ{ ĊĠĠĠĠĠĠĠ Ġswipe Refresh Layout . is Refresh ing Ġ= Ġstate Ġis ĠS yll ab us ViewState . Loading ĊĠĠĠĠĠĠĠ Ġempty View . set G one () ĊĠĠĠĠĠĠĠ Ġswipe Refresh Layout . setVisible () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS yll ab us ViewState . Loading Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠS yll ab us ViewState . Loaded Full Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy ll ab us Tab Layout . setVisible () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy ll ab us Pager . can Swipe Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy ll ab us WebView ?. load Html ( state . sy ll ab us , Ġcontext . getString ( com . in structure . pand ares . R . string . sy ll ab us )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Events ( state . events State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠS yll ab us ViewState . Loaded No Sy ll ab us Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy ll ab us Tab Layout . set G one () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy ll ab us Pager . setCurrent Item ( 1 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy ll ab us Pager . can Swipe Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Events ( state . events State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠS yll ab us ViewState . Loaded No Events Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy ll ab us Tab Layout . set G one () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy ll ab us Pager . setCurrent Item ( 0 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy ll ab us Pager . can Swipe Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy ll ab us WebView ?. load Html ( state . sy ll ab us , Ġcontext . getString ( com . in structure . pand ares . R . string . sy ll ab us )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS yll ab us ViewState . Loaded Nothing Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy ll ab us Tab Layout . set G one () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . set G one () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty View . setVisible () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Empty View ( empty View , ĠR . drawable . vd _ p anda _ space , ĠR . string . no Sy ll ab us , ĠR . string . no Sy ll ab us Sub text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. exhaustive ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender Events ( events State : ĠEvents ViewState ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Ġ( events State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsy ll ab us Empty View ?. setVisible ( visibility . empty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsy ll ab us Events Error ?. setVisible ( visibility . error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsy ll ab us Events Recycler ?. setVisible ( visibility . list ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sy ll ab us Pager . currentItem Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . set Swipe able Children ( R . id . sy ll ab us WebView ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . set Swipe able Children ( R . id . sy ll ab us Events Recycler , ĠR . id . sy ll ab us Empty View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( events State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvents ViewState . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy ll ab us Retry ?. onClick Ġ{ Ġconsumer ?. accept ( Sy ll ab us Event . Pull To Refresh ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvents ViewState . Empty Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Empty View ( sy ll ab us Empty View , ĠR . drawable . vd _ p anda _ space , ĠR . string . no Assignments , ĠR . string . no Assignments Sub text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEvents ViewState . Loaded Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sy ll ab us Events Recycler ?. adapter Ġ== Ġnull ) Ġsy ll ab us Events Recycler ?. adapter Ġ= ĠS yll ab us Events Adapter ( consumer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( sy ll ab us Events Recycler ?. adapter Ġas ? ĠS yll ab us Events Adapter )?. update Events ( events State . events ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Assignment View ( assignment : ĠAssignment , Ġcanvas Context : ĠCanvas Context ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRoute Matcher . route ( context , ĠAssignment Details Fragment . make Route ( canvas Context , Ġassignment . id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Schedule Item View ( schedule Item : ĠSchedule Item , Ġcanvas Context : ĠCanvas Context ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRoute Matcher . route ( context , ĠCalendar Event Fragment . make Route ( canvas Context , Ġschedule Item )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Tab Titles (): ĠList < String > Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġcontext . getString ( com . in structure . pand ares . R . string . sy ll ab us ), ĊĠĠĠĠĠĠĠ Ġcontext . getString ( com . in structure . pand ares . R . string . summary ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġset Empty View ( empty View : ĠEmpty View ?, Ġdrawable Id : ĠInt , Ġtitle Id : ĠInt , ĠmessageId : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġempty View ?. set Empty View Image ( context . get Drawable Compat ( drawable Id )) ĊĠĠĠĠĠĠĠ Ġempty View ?. setTitle Text ( title Id ) ĊĠĠĠĠĠĠĠ Ġempty View ?. setMessage Text ( message Id ) ĊĠĠĠĠĠĠĠ Ġempty View ?. set List Empty () ĊĠĠĠ Ġ} Ċ Ċ } Ċ