/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 Ġ- Ġ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 . teacher . activities Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . Activity Info Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Typed Value Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . view pager . widget . ViewPager Ċ import Ġcom . in structure . canvas api 2 . models . Assignment Ċ import Ġcom . in structure . canvas api 2 . models . Dis cussion Topic Header Ċ import Ġcom . in structure . canvas api 2 . models . Grade able Student Submission Ċ import Ġcom . in structure . canvas api 2 . models . Student Assign ee Ċ import Ġcom . in structure . canvas api 2 . utils . Api Prefs Ċ import Ġcom . in structure . canvas api 2 . utils . coerce At Least Ċ import Ġcom . in structure . canvas api 2 . utils . range Within Ċ import Ġcom . in structure . canvas api 2 . utils . we ave . we ave Ċ import Ġcom . in structure . inter actions . router . Route Ċ import Ġcom . in structure . inter actions . router . Router Params Ċ import Ġcom . in structure . p anda utils . activities . Base Presenter Activity Ċ import Ġcom . in structure . p anda utils . dialogs . Un saved Changes Continue Dialog Ċ import Ġcom . in structure . p anda utils . dialogs . Upload Files Dialog Ċ import Ġcom . in structure . p anda utils . utils .* Ċ import Ġcom . in structure . teacher . Build Config Ċ import Ġcom . in structure . teacher . R Ċ import Ġcom . in structure . teacher . adapters . Submission Content Adapter Ċ import Ġcom . in structure . teacher . events . Assignment G ra ded Event Ċ import Ġcom . in structure . teacher . factory . Speed Gr ader Presenter Factory Ċ import Ġcom . in structure . teacher . present ers . Speed Gr ader Presenter Ċ import Ġcom . in structure . teacher . utils . Teacher Prefs Ċ import Ġcom . in structure . teacher . utils . is Talk back Enabled Ċ import Ġcom . in structure . teacher . utils . toast Ċ import Ġcom . in structure . teacher . view . Audio Permission Granted Event Ċ import Ġcom . in structure . teacher . view . Tab Selected Event Ċ import Ġcom . in structure . teacher . view . Video Permission Granted Event Ċ import Ġcom . in structure . teacher . view interface . Speed Gr ader View Ċ import Ġcom . p sp df kit . preferences . P SP DF Kit Preferences Ċ import Ġkotlinx . android . synt hetic . main . activity _ speed grader .* Ċ import Ġkotlinx . coroutines . delay Ċ import Ġorg . green robot . event bus . EventBus Ċ import Ġorg . green robot . event bus . Subscribe Ċ import Ġorg . green robot . event bus . Thread Mode Ċ import Ġjava . util .* Ċ Ċ class ĠSpeed Gr ader Activity Ġ: ĠBase Presenter Activity < Speed Gr ader Presenter , ĠSpeed Gr ader View >(), ĠSpeed Gr ader View Ġ{ ĊĊĠĠĠ Ġ/* ĠThese Ġshould Ġbe Ġpassed Ġto Ġthe Ġpresenter Ġfactory Ġand Ġshould Ġnot Ġbe Ġdirectly Ġreferenced Ġotherwise Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġcourse Id : ĠLong Ġby Ġlazy Ġ{ Ġintent . extras . getLong ( Const . CO URSE _ ID ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġassignment Id : ĠLong Ġby Ġlazy Ġ{ Ġintent . extras . getLong ( Const . ASSIGN MENT _ ID ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġsubmission Id : ĠLong Ġby Ġlazy Ġ{ Ġintent . extras . getLong ( Router Params . SUB MISSION _ ID ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġsubmissions : ĠArrayList < Grade able Student Submission > Ġby Ġlazy Ġ{ Ġintent . extras . get Parcelable ArrayList < Grade able Student Submission >( Const . SUB MISSION ) Ġ?: Ġarray ListOf () Ġ} ĊĠĠĠ Ġprivate Ġval Ġdiscussion Topic Header : ĠDis cussion Topic Header ? Ġby Ġlazy Ġ{ Ġintent . extras . get Parcelable < Dis cussion Topic Header >( Const . DIS CU SS ION _ HEADER ) Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġinitial Selection : ĠInt Ġby Ġlazy Ġ{ Ġintent . extras . getInt ( Const . SELECTED _ ITEM , Ġ 0 ) Ġ} ĊĠĠĠ Ġprivate Ġvar Ġcurrent Selection Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġprevious Selection Ġ= Ġ 0 ĊĊĠĠĠ Ġ// ĠUsed Ġfor Ġkeeping Ġtrack Ġof Ġthe Ġpage Ġthat Ġis Ġasking Ġfor Ġmedia Ġpermissions Ġfrom ĠSubmission ContentView ĊĠĠĠ Ġprivate Ġvar Ġassign ee Id : ĠLong Ġ= Ġ- 1 L ĊĠĠĠ Ġprivate Ġvar Ġneed To Force Network : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ// ĠUsed Ġin Ġthe ĠSubmission View Fragments Ġin Ġthe ĠView Pager Ġto Ġhandle Ġissues Ġwith Ġsl iding Ġpanel ĊĠĠĠ Ġvar Ġis Currently Annot ating Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠSubmission Content Adapter ĊĊĠĠĠ Ġoverride Ġfun Ġun Bundle ( extras : ĠBundle ) Ġ= ĠUnit ĊĊĠĠĠ Ġoverride Ġfun Ġon Presenter Prepared ( presenter : ĠSpeed Gr ader Presenter ?) Ġ= ĠUnit ĊĊĠĠĠ Ġoverride Ġfun Ġon Ready Set Go ( presenter : ĠSpeed Gr ader Presenter ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter ?. setup Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠThis Ġis Ġhere Ġto Ġprevent Ġtransaction Ġtoo Ġlarge Ġexceptions , Ġpossibly Ġcaused Ġby Ġpdf Fragment 's Ġsaving . ĊĠĠĠ Ġ@ Suppress Lint (" Missing Super Call ") ĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ?) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġget Presenter Factory () Ġ= ĠSpeed Gr ader Presenter Factory ( ĊĠĠĠĠĠĠĠ Ġcourse Id , ĊĠĠĠĠĠĠĠ Ġassignment Id , ĊĠĠĠĠĠĠĠ Ġsubmissions , ĊĠĠĠĠĠĠĠ Ġsubmission Id , ĊĠĠĠĠĠĠĠ Ġdiscussion Topic Header ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe ĠPDF Ġauthor , Ġbut Ġonly Ġif Ġit Ġhasn 't Ġbeen Ġset Ġyet ĊĠĠĠĠĠĠĠ Ġif Ġ(! P SP DF Kit Preferences . get ( this ). is Annotation Creator Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP SP DF Kit Preferences . get ( this ). set Annotation Creator ( Api Prefs . user ?. name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ speed grader ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon DataSet ( assignment : ĠAssignment , Ġsubmissions : ĠList < Grade able Student Submission >) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠSubmission Content Adapter ( assignment , Ġpresenter . course , Ġsubmissions ) ĊĠĠĠĠĠĠĠ Ġsubmission Content Pager . off screen Page Limit Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġsubmission Content Pager . page Margin Ġ= ĠMath . round ( Typed Value . apply Dimension ( Typed Value . COMPLEX _ UNIT _ DIP , Ġ 1 f , Ġresources . display Metrics )) ĊĠĠĠĠĠĠĠ Ġsubmission Content Pager . set Page Margin Drawable ( R . color . divider Color ) ĊĠĠĠĠĠĠĠ Ġsubmission Content Pager . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġsubmission Content Pager . setCurrent Item ( initial Selection , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġsubmission Content Pager . add On Page ChangeListener ( object Ġ: ĠView Pager . On Page ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Scroll StateChanged ( state : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Sc rolled ( position : ĠInt , Ġposition Offset : ĠFloat , Ġposition Offset Pixels : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Selected ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Selection Ġ= Ġcurrent Selection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Selection Ġ= Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adapter . has Un saved Changes ( previous Selection )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUn saved Changes Continue Dialog . show ( support FragmentManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubmission Content Pager . setCurrent Item ( previous Selection , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġsetup Tutorial View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" EXPERIMENT AL _ FEATURE _ WARNING ") ĊĠĠĠ Ġprivate Ġfun Ġsetup Tutorial View () Ġ= Ġwe ave Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build Config . IS _ TEST ING Ġ|| ĠTe acher Prefs . has View ed Swipe Tutorial Ġ|| Ġadapter . count Ġ< Ġ 2 Ġ|| Ġis Talk back Enabled ()) Ġreturn @ we ave ĊĊĠĠĠĠĠĠĠ Ġdelay ( T UT OR IAL _ DELAY ) ĊĠĠĠĠĠĠĠ Ġswipe Tutorial View . setVisible (). onClick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . alpha Ġ!= Ġ 1 f ) Ġreturn @ onClick ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObject Animator . of Float ( it , Ġ" alpha ", Ġ 1 f , Ġ 0 f ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠAn imator . Animator Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( animation : ĠAn imator ?) Ġ= ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( animation : ĠAn imator ?) Ġ= ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ?) Ġ= ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set G one () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTe acher Prefs . has View ed Swipe Tutorial Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= ĠT UT OR IAL _ DELAY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠObject Animator . of Float ( swipe Tutorial View , Ġ" alpha ", Ġ 0 f , Ġ 1 f ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= ĠT UT OR IAL _ DELAY ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError Setting Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġtoast ( R . string . error Occurred ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġenable ViewPager () Ġ{ ĊĠĠĠĠĠĠĠ Ġsubmission Content Pager . is Paging Enabled Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisable ViewPager () Ġ{ ĊĠĠĠĠĠĠĠ Ġsubmission Content Pager . is Paging Enabled Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġfun Ġlock Orientation () Ġ{ ĊĠĠĠĠĠĠĠ Ġrequested Orientation Ġ= ĠActivity Info . SCREEN _ OR IENTATION _ LOCK ED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġunlock Orientation () Ġ{ ĊĠĠĠĠĠĠĠ Ġrequested Orientation Ġ= ĠActivity Info . SCREEN _ OR IENTATION _ SENSOR ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). register ( this ) ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). unregister ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ ĠEx o Agent . release All Agents () Ġ// ĠStop Ġany Ġmedia Ġplayback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġ@ Subscribe ĊĠĠĠ Ġfun Ġon Tab Selected ( event : ĠTab Selected Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter . initial Tab Idx Ġ= Ġevent . selected Tab Idx ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġ@ Subscribe ( thread Mode Ġ= ĠThread Mode . MAIN , Ġsticky Ġ= Ġtrue ) ĊĠĠĠ Ġfun Ġon Assignment G ra ded ( event : ĠAssignment G ra ded Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent . once ( java Class . simple Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn validate Ġsubmission Ġcache Ġfor Ġpost / hide Ġgr ades Ġ( this Ġcovers Ġsubmissions Ġnot Ġcurrently Ġvisible Ġin Ġthe Ġpager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( assignment Id Ġ== Ġit ) Ġadapter . invalidate Submission Cache () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Audio Permissions ( assign ee Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( check Audio Permission ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġhave Ġthe Ġpermission ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). post ( Audio Permission Granted Event ( assign ee Id )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . assign ee Id Ġ= Ġassign ee Id ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĠarrayOf ( Permission Utils . RECORD _ AUDIO ), ĠPermission Utils . PERMISSION _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Video Permissions ( assign ee Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( check Video Permission ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġhave Ġthe Ġpermissions ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). post ( Video Permission Granted Event ( assign ee Id )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . assign ee Id Ġ= Ġassign ee Id ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĠarrayOf ( Permission Utils . CAMERA , ĠPermission Utils . RECORD _ AUDIO ), ĠPermission Utils . PERMISSION _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Audio Permission (): ĠBoolean Ġ= ĠContext Compat . check Self Permission ( this , ĠPermission Utils . RECORD _ AUDIO ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠ Ġprivate Ġfun Ġcheck Video Permission (): ĠBoolean Ġ= ĠContext Compat . check Self Permission ( this , ĠPermission Utils . CAMERA ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠPermission Utils . PERMISSION _ REQUEST _ CODE Ġ&& Ġgrant Results . size Ġ>= Ġ 0 Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions . contains ( Permission Utils . CAMERA ) Ġ&& Ġpermissions . contains ( Permission Utils . RECORD _ AUDIO ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( grant Results . all Ġ{ Ġit Ġ== ĠPackage Manager . PERMISSION _ GRAN TED Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). post ( Video Permission Granted Event ( assign ee Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions . contains ( Permission Utils . RECORD _ AUDIO ) Ġ-> Ġ ĠEvent Bus . getDefault (). post ( Audio Permission Granted Event ( assign ee Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠUpload Files Dialog . CAMERA _ PIC _ REQUEST Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code Ġ== ĠUpload Files Dialog . P ICK _ FILE _ FROM _ DEVICE Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code Ġ== ĠUpload Files Dialog . P ICK _ IMAGE _ G ALL ERY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// File ĠDialog ĠFragment Ġwill Ġnot Ġbe Ġnotified Ġof Ġon Activity Result (), Ġalert Ġmanually ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOn Activity Results ( Activity Result ( request Code , ĠresultCode , Ġdata ), Ġnull ). post Sticky () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠT UT OR IAL _ DELAY Ġ= Ġ 4 0 0 L ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġnumber Ġof Ġsubmissions Ġto Ġbe Ġbundled Ġ( pre - cached ) Ġto Ġeither Ġside Ġof Ġthe Ġselected ĊĠĠĠĠĠĠĠĠ Ġ* Ġsubmission . ĠIf Ġthis Ġvalue Ġis Ġtoo Ġhigh Ġit Ġmay Ġresult Ġin ĠAndroid Ġthrowing Ġa ĊĠĠĠĠĠĠĠĠ Ġ* ĠTransaction Too Large Exception Ġwhen Ġcreating ĠSpeed Gr ader Activity . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ C ACHED _ ADJ AC ENT Ġ= Ġ 6 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġmaximum Ġsubmission Ġhistory Ġdepth Ġallowed Ġfor Ġa Ġsubmission Ġto Ġbe Ġel igible Ġfor ĊĠĠĠĠĠĠĠĠ Ġ* Ġpre - caching . ĠIf Ġthis Ġvalue Ġis Ġtoo Ġhigh Ġit Ġmay Ġresult Ġin ĠAndroid Ġthrowing Ġa ĊĠĠĠĠĠĠĠĠ Ġ* ĠTransaction Too Large Exception Ġwhen Ġcreating ĠSpeed Gr ader Activity . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ HISTORY _ THRESHOLD Ġ= Ġ 8 ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġmake Bundle ( course Id : ĠLong , Ġassignment Id : ĠLong , Ġsubmissions : ĠList < Grade able Student Submission >, Ġselected Idx : ĠInt ): ĠBundle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Long ( Const . CO URSE _ ID , Ġcourse Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Long ( Const . ASSIGN MENT _ ID , Ġassignment Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAvoid ĠTransaction Too Large Exception Ġby Ġonly Ġbund ling Ġsubmissions Ġin Ġthe Ġcached Ġrange Ġwith Ġshallow Ġsubmission Ġhist ories ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcached Range Ġ= Ġselected Idx . range Within ( MAX _ C ACHED _ ADJ AC ENT ). coerce At Least ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompact Sub missions Ġ= Ġsubmissions . map Indexed Ġ{ Ġindex , Ġsubmission Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin Range Ġ= Ġindex Ġin Ġcached Range ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsmall History Ġ= Ġsubmission . submission ?. submission History ?. size Ġ?: Ġ 0 Ġ<= ĠMAX _ HISTORY _ THRESHOLD ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsmall B odies Ġ= Ġsubmission . submission ?. submission History ?. none Ġ{ Ġit ?. body ?. length Ġ?: Ġ 0 Ġ> Ġ 2 0 4 8 Ġ} Ġ?: Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( in Range Ġ&& Ġsmall History Ġ&& Ġsmall B odies Ġ&& Ġsubmission . submission Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubmission . copy ( is Cached Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubmission . copy ( submission Ġ= Ġnull , Ġis Cached Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġsort Ġwhen Ġan on Ġgrad ing Ġis Ġoff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( submissions . first OrNull ()?. submission ?. assignment ?. anonymous Grad ing Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġneed Ġto Ġsort Ġthe Ġsubmissions Ġso Ġthey Ġappear Ġin Ġthe Ġsame Ġorder Ġas Ġthe Ġsubmissions Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Parcelable ArrayList ( Const . SUB MISSION , ĠArrayList ( compact Sub missions . sorted By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . assign ee Ġas ? ĠStudent Assign ee )?. student ?. sortable Name ?. toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Parcelable ArrayList ( Const . SUB MISSION , ĠArrayList ( compact Sub missions )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( Const . SELECTED _ ITEM , Ġselected Idx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Intent ( context : ĠContext , Ġroute : ĠRoute ): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠSpeed Gr ader Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! route . arguments . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extras ( route . arguments ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTry Ġto Ġget Ġthe Ġinformation Ġfrom Ġthe Ġroute Ġthat Ġthis Ġactivity Ġneeds . ĠThis Ġhappens ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen Ġwe Ġcome Ġfrom Ġa Ġpush Ġnotification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extras ( Bundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Long ( Const . CO URSE _ ID , Ġroute . params Hash [ Router Params . CO URSE _ ID ]?. to Long () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Long ( Const . ASSIGN MENT _ ID , Ġroute . params Hash [ Router Params . ASSIGN MENT _ ID ]?. to Long () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Long ( Router Params . SUB MISSION _ ID , Ġroute . params Hash [ Router Params . SUB MISSION _ ID ]?. to Long () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġintent ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Intent ( context : ĠContext , Ġcourse Id : ĠLong , Ġassignment Id : ĠLong , Ġsubmission Id : ĠLong ) Ġ= ĠIntent ( context , ĠSpeed Gr ader Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe 've Ġcome Ġfrom Ġa Ġpush Ġnotification , Ġwe 'll Ġuse Ġthese Ġids Ġto Ġgrab Ġthe Ġdata Ġwe Ġneed Ġlater ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extras ( Bundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Long ( Const . CO URSE _ ID , Ġcourse Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Long ( Const . ASSIGN MENT _ ID , Ġassignment Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Long ( Router Params . SUB MISSION _ ID , Ġsubmission Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ