/* Ċ Ġ* Ġ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 . fragments Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . ScrollView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġcom . google . android . material . text field . TextInput Layout Ċ import Ġcom . in structure . canvas api 2 . managers . Assignment Manager Ċ import Ġcom . in structure . canvas api 2 . managers . Group Categories Manager Ċ import Ġcom . in structure . canvas api 2 . managers . Section Manager Ċ import Ġcom . in structure . canvas api 2 . managers . User Manager Ċ import Ġcom . in structure . canvas api 2 . models .* Ċ import Ġcom . in structure . canvas api 2 . models . Assignment . Companion . GP A _ SCALE _ TYPE Ċ import Ġcom . in structure . canvas api 2 . models . Assignment . Companion . LET TER _ GR ADE _ TYPE Ċ import Ġcom . in structure . canvas api 2 . models . Assignment . Companion . NOT _ GR ADED _ TYPE Ċ import Ġcom . in structure . canvas api 2 . models . Assignment . Companion . PASS _ FAIL _ TYPE Ċ import Ġcom . in structure . canvas api 2 . models . Assignment . Companion . PERCENT _ TYPE Ċ import Ġcom . in structure . canvas api 2 . models . Assignment . Companion . POINTS _ TYPE Ċ import Ġcom . in structure . canvas api 2 . models . post models . Assignment Post Body Ċ import Ġcom . in structure . canvas api 2 . utils . Number Helper Ċ import Ġcom . in structure . canvas api 2 . utils . Pr ono uns Ċ import Ġcom . in structure . canvas api 2 . utils . we ave . await Api Ċ import Ġcom . in structure . canvas api 2 . utils . we ave . we ave Ċ import Ġcom . in structure . inter actions . router . Route Ċ import Ġcom . in structure . p anda utils . dialogs . DatePicker Dialog Fragment Ċ import Ġcom . in structure . p anda utils . dialogs . Time Picker Dialog Fragment Ċ import Ġcom . in structure . p anda utils . discussion s . Dis cussion Utils Ċ import Ġcom . in structure . p anda utils . fragments . Base Fragment Ċ import Ġcom . in structure . p anda utils . utils .* Ċ import Ġcom . in structure . p anda utils . views . Canvas WebView Ċ import Ġcom . in structure . teacher . R Ċ import Ġcom . in structure . teacher . dialog . Confirm Remove Assignment Override Dialog Ċ import Ġcom . in structure . teacher . events . Assign ees Updated Event Ċ import Ġcom . in structure . teacher . events . Assignment Updated Event Ċ import Ġcom . in structure . teacher . events . post Ċ import Ġcom . in structure . teacher . models . Due Date Group Ċ import Ġcom . in structure . teacher . router . Route Matcher Ċ import Ġcom . in structure . teacher . utils .* Ċ import Ġcom . in structure . teacher . view . Assignment Override View Ċ import Ġkotlinx . android . synt hetic . main . fragment _ edit _ assignment _ details .* Ċ import Ġkotlinx . android . synt hetic . main . view _ assignment _ override . view .* Ċ import Ġkotlinx . coroutines . Job Ċ import Ġorg . green robot . event bus . EventBus Ċ import Ġorg . green robot . event bus . Subscribe Ċ import Ġorg . green robot . event bus . Thread Mode Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . text . ParseException Ċ import Ġjava . util . Date Ċ Ċ class ĠEdit Assignment Details Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Course : ĠCourse Ġby ĠParcel able Arg ( Course ()) ĊĠĠĠ Ġprivate Ġvar Ġm Assignment : ĠAssignment Ġby ĠParcel able Arg ( key Ġ= ĠASS IGN MENT ) ĊĠĠĠ Ġprivate Ġvar Ġm Is Published : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġm Scroll To Dates : ĠBoolean Ġby ĠBoolean Arg ( key Ġ= ĠSHO ULD _ SCROLL _ TO _ DAT ES ) ĊĠĠĠ Ġprivate Ġvar Ġm Display Grade As : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Session Auth Job : ĠJob ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġplace Holder List : ĠArrayList < Placeholder > Ġ= ĠArrayList () ĊĊĠĠĠ Ġprivate Ġvar Ġr ce Image Upload Job : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġsave Button : ĠTextView ? Ġget () Ġ= Ġview ?. findViewById ( R . id . menu Save ) ĊĊĠĠĠ Ġprivate Ġval Ġgroups Mapped Ġ= Ġhash Map Of < Long , ĠGroup >() ĊĠĠĠ Ġprivate Ġval Ġsections Mapped Ġ= Ġhash Map Of < Long , ĠSection >() ĊĠĠĠ Ġprivate Ġval Ġstudents Mapped Ġ= Ġhash Map Of < Long , ĠUser >() ĊĊĠĠĠ Ġ// ĠKeep s Ġtrack Ġof Ġwhich Ġoverride Ġwe Ġwere Ġediting Ġso Ġwe Ġcan Ġscroll Ġback Ġto Ġit Ġwhen Ġthe Ġuser Ġreturns Ġfrom Ġediting Ġassign ees ĊĠĠĠ Ġprivate Ġvar Ġscroll Back To Override : ĠAssignment Override View ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Due Date Api Calls : ĠJob ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Put Assignment Call : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Scroll Handler : ĠHandler Ġ= ĠHandler () ĊĊĠĠĠ Ġprivate Ġvar Ġm Scroll To Runnable : ĠRunnable Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( is Added ) Ġscroll View . full Scroll ( ScrollView . FOCUS _ DOWN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠWe Ġmaintain Ġa Ġcopy Ġof Ġthe Ġgrouped Due Dates Ġto Ġmanipulate Ġand Ġuse Ġto Ġdisplay ĊĠĠĠ Ġ// Ġoverrides . ĠWhen Ġpushing Ġchanges , Ġwe Ġupdate Ġthe Ġoriginal Ġassignment Ġobject ĊĠĠĠ Ġ// Ġwith Ġthe Ġchanges Ġin Ġthe Ġcopy . ĊĠĠĠ Ġprivate Ġvar Ġm Edit Date Groups : ĠEdit Date Groups Ġ= Ġarray ListOf () ĊĊĠĠĠ Ġprivate Ġval Ġdate Picker OnClick : Ġ( date : ĠDate ?, Ġ( Int , ĠInt , ĠInt ) Ġ-> ĠUnit ) Ġ-> ĠUnit Ġ= Ġ{ Ġdate , Ġcallback Ġ-> ĊĠĠĠĠĠĠĠ ĠDate Picker Dialog Fragment . getInstance ( require Activity (). support FragmentManager , Ġdate ) Ġ{ Ġyear , Ġmonth , Ġday OfMonth Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( year , Ġmonth , Ġday OfMonth ) ĊĠĠĠĠĠĠĠ Ġ}. show ( require Activity (). support FragmentManager , ĠDate Picker Dialog Fragment :: class . java . simple Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtime Picker OnClick : Ġ( date : ĠDate ?, Ġ( Int , ĠInt ) Ġ-> ĠUnit ) Ġ-> ĠUnit Ġ= Ġ{ Ġdate , Ġcallback Ġ-> ĊĠĠĠĠĠĠĠ ĠTime Picker Dialog Fragment . getInstance ( require Activity (). support FragmentManager , Ġdate ) Ġ{ Ġhour , Ġmin Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( hour , Ġmin ) ĊĠĠĠĠĠĠĠ Ġ}. show ( require Activity (). support FragmentManager , ĠTime Picker Dialog Fragment :: class . java . simple Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġremove Override Click : Ġ( Due Date Group ) Ġ-> ĠUnit Ġ= Ġ{ Ġcallback Ġ-> ĊĠĠĠĠĠĠĠ Ġ// ĠShow Ġconfirmation Ġdialog ĊĠĠĠĠĠĠĠ ĠConfirm Remove Assignment Override Dialog . show ( require Activity (). support FragmentManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Edit Date Groups . contains ( callback )) Ġm Edit Date Groups . remove ( callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Overrides () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠAppCompat Delegate . set Compat Vector From Resources Enabled ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlayout Res Id () Ġ= ĠR . layout . fragment _ edit _ assignment _ details ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( view : ĠView ?) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsavedInstanceState ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Edit Date Groups Ġ= Ġ( savedInstanceState . get Serializable ( EDIT _ DATE _ GROUP S ) Ġas ĠArrayList < Due Date Group >) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠHide ĠKeyboard ĊĠĠĠĠĠĠĠ Ġrequire Activity (). window . set Soft Input Mode ( WindowManager . LayoutParams . SOFT _ INPUT _ STATE _ ALWAYS _ HIDDEN ) ĊĊĠĠĠĠĠĠĠ Ġsetup Views () ĊĠĠĠĠĠĠĠ Ġsetup Toolbar () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). register ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). unregister ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġimage ĠUri ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Codes . P ICK _ IMAGE _ G ALL ERY Ġ-> Ġdata ?. data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Codes . CAMERA _ PIC _ REQUEST Ġ-> ĠMedia Upload Utils . handle Camera Pic Result ( require Activity (), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ Ġimage Uri Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ce Image Upload Job Ġ= ĠMedia Upload Utils . upload R ce Image Job ( image Uri , Ġm Course , Ġrequire Activity ()) Ġ{ Ġtext , Ġalt Ġ-> Ġdescription Editor . insert Image ( text , Ġalt ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġtoolbar . setup Close Button ( this ) ĊĠĠĠĠĠĠĠ Ġtoolbar . title Ġ= ĠgetString ( R . string . edit _ assignment ) ĊĠĠĠĠĠĠĠ Ġtoolbar . setup Menu ( R . menu . menu _ save _ generic ) Ġ{ Ġsave Assignment () Ġ} ĊĠĠĠĠĠĠĠ ĠView St y ler . theme Toolbar Bottom Sheet ( require Activity (), Ġis Tablet , Ġtoolbar , ĠColor . BLACK , Ġfalse ) ĊĠĠĠĠĠĠĠ ĠView St y ler . set Toolbar Elevation Small ( require Context (), Ġtoolbar ) ĊĠĠĠĠĠĠĠ Ġsave Button ?. setTextColor ( Theme Prefs . button Color ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Publish Switch () Ġ= Ġwith ( m Assignment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġa Ġstudent Ġhas Ġsubmitted Ġsomething , Ġwe Ġcan 't Ġlet Ġthe Ġteacher Ġun publish Ġthe Ġassignment ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Assignment . un publish able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Wrapper . set G one () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Published Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠPublish Ġstatus ĊĠĠĠĠĠĠĠ Ġpublish Switch . apply Theme () ĊĠĠĠĠĠĠĠ Ġpublish Switch . isChecked Ġ= Ġpublished ĊĠĠĠĠĠĠĠ Ġm Is Published Ġ= Ġpublished ĊĊĠĠĠĠĠĠĠ Ġpublish Switch . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> Ġm Is Published Ġ= Ġis Checked Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Display Grade As () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠFilters Ġspinner ĊĠĠĠĠĠĠĠ Ġval Ġspinner Adapter Ġ= ĠArray Adapter . createFrom Resource ( require Context (), ĠR . array . display _ grade _ as _ types , ĠR . layout . simple _ spinner _ item ) ĊĠĠĠĠĠĠĠ Ġspinner Adapter . set DropDown View Resource ( android . R . layout . simple _ spinner _ dropdown _ item ) ĊĠĠĠĠĠĠĠ Ġdisplay Grade As Spinner . adapter Ġ= Ġspinner Adapter ĊĠĠĠĠĠĠĠ ĠView St y ler . theme Spinner ( require Context (), Ġdisplay Grade As Spinner , ĠTheme Prefs . brand Color ) ĊĠĠĠĠĠĠĠ Ġdisplay Grade As Spinner . on ItemSelected Listener Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġwhen ( m Display Grade As ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOINT S _ TYPE Ġ-> Ġdisplay Grade As Spinner . setSelection ( spinner Adapter . getPosition ( getString ( R . string . points ))) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG PA _ SCALE _ TYPE Ġ-> Ġdisplay Grade As Spinner . setSelection ( spinner Adapter . getPosition ( getString ( R . string . g pa _ scale ))) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLETTER _ GR ADE _ TYPE Ġ-> Ġdisplay Grade As Spinner . setSelection ( spinner Adapter . getPosition ( getString ( R . string . letter _ grade ))) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPASS _ FAIL _ TYPE Ġ-> Ġdisplay Grade As Spinner . setSelection ( spinner Adapter . getPosition ( getString ( R . string . complete _ in complete ))) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPER CENT _ TYPE -> Ġdisplay Grade As Spinner . setSelection ( spinner Adapter . getPosition ( getString ( R . string . percentage ))) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNOT _ GR ADED _ TYPE Ġ-> Ġdisplay Grade As Spinner . setSelection ( spinner Adapter . getPosition ( getString ( R . string . not _ graded ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdisplay Grade As Spinner . on ItemSelected Listener Ġ= Ġ( object Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View <* >, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( view Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen (( view Ġas ĠTextView ). text . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . points ) Ġ-> Ġm Display Grade As Ġ= ĠPOINT S _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . g pa _ scale ) Ġ-> Ġm Display Grade As Ġ= ĠG PA _ SCALE _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . letter _ grade ) Ġ-> Ġm Display Grade As Ġ= ĠLETTER _ GR ADE _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . complete _ in complete ) Ġ-> Ġm Display Grade As Ġ= ĠPASS _ FAIL _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . percentage ) Ġ-> Ġm Display Grade As Ġ= ĠPER CENT _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . not _ graded ) Ġ-> Ġm Display Grade As Ġ= ĠNOT _ GR ADED _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View <* >) Ġ{} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" EXPERIMENT AL _ FEATURE _ WARNING ") ĊĠĠĠ Ġprivate Ġfun Ġsetup Views () Ġ= Ġwith ( m Assignment ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġdescription Editor . hide Editor Toolbar () ĊĠĠĠĠĠĠĠ Ġdescription Editor . action Upload Image Callback Ġ= Ġ{ ĠMedia Upload Utils . show Pick Image Dialog ( this @ Edit Assignment Details Fragment ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ( view Ġas ? ĠViewGroup )?. desc endants < TextInput Layout >() ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . type face Ġ= ĠType face . create (" sans - serif - medium ", ĠType face . NORMAL ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAssignment Ġname ĊĠĠĠĠĠĠĠ Ġedit Assignment Name . setText ( name ) ĊĠĠĠĠĠĠĠ Ġedit Assignment Name . setOn Focus ChangeListener Ġ{ Ġ_, Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Focus ) Ġdescription Editor . hide Editor Toolbar () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġset Ġthe Ġunderline Ġto Ġbe Ġthe Ġbrand Ġcolor ĊĠĠĠĠĠĠĠ ĠView St y ler . theme EditText ( require Context (), Ġedit Assignment Name , ĠTheme Prefs . brand Color ) ĊĠĠĠĠĠĠĠ Ġedit Assignment Name . on TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassignment Name TextInput . error Ġ= ĠgetString ( R . string . assignment _ name _ must _ be _ set ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassignment Name TextInput . isError Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠPoints Ġpossible ĊĠĠĠĠĠĠĠ Ġedit Grade Points . setText ( Number Helper . format Decimal ( points Possible , Ġ 2 , Ġtrue )) ĊĠĠĠĠĠĠĠ Ġ// Ġset Ġthe Ġunderline Ġto Ġbe Ġthe Ġbrand Ġcolor ĊĠĠĠĠĠĠĠ ĠView St y ler . theme EditText ( require Context (), Ġedit Grade Points , ĠTheme Prefs . brand Color ) ĊĠĠĠĠĠĠĠ Ġedit Grade Points . on TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Total TextInput . error Ġ= ĠgetString ( R . string . assignment _ points _ must _ be _ set ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Total TextInput . isError Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsetup Publish Switch () ĊĊĠĠĠĠĠĠĠ Ġif ( m Display Grade As Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Display Grade As Ġ= Ġgrad ing Type ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsetup Display Grade As () ĊĊĠĠĠĠĠĠĠ ĠView St y ler . theme Input Text Layout ( assignment Name TextInput , Ġrequire Context (). getColor Compat ( R . color . default Text Gray )) ĊĠĠĠĠĠĠĠ ĠView St y ler . theme Input Text Layout ( grade Total TextInput , Ġrequire Context (). getColor Compat ( R . color . default Text Gray )) ĊĠĠĠĠĠĠĠ ĠView St y ler . set Toolbar Elevation ( require Context (), Ġtoolbar , ĠR . dim en . toolbar _ elevation _ small ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDescription ĊĠĠĠĠĠĠĠ Ġsetup Description () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Edit Date Groups . isEmpty ()) Ġm Edit Date Groups . addAll ( m Assignment . grouped Due Dates ) ĊĊĠĠĠĠĠĠĠ Ġm Due Date Api Calls Ġ= Ġwe ave Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( groups Mapped . isEmpty () Ġ&& Ġsections Mapped . isEmpty () Ġ&& Ġstudents Mapped . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsections Ġ= Ġawait Api < List < Section >> Ġ{ ĠSection Manager . getAll Sections For Course ( course Id , Ġit , Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroups Ġ= Ġif Ġ( group CategoryId Ġ> Ġ 0 L ) Ġawait Api < List < Group >> Ġ{ ĠGroup Categories Manager . getAll Groups For Category ( group CategoryId , Ġit , Ġfalse ) Ġ} Ġelse Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstudents Ġ= Ġawait Api < List < User >> Ġ{ ĠUser Manager . getAll People List ( m Course , Ġit , Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroups Mapped Ġ+= Ġgroups . associate By Ġ{ Ġit . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsections Mapped Ġ+= Ġsections . associate By Ġ{ Ġit . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudents Mapped Ġ+= Ġstudents . associate By Ġ{ Ġit . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Overrides () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Scroll To Dates ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Scroll To Dates Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġcame Ġfrom Ġthe ĠD ates Ġpage , Ġscroll Ġto Ġthe Ġdates Ġfor Ġediting ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Scroll Handler . post Delayed ( m Scroll To Runnable , Ġ 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Back To Override ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Scroll To Dates ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll View . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll View . full Scroll ( ScrollView . FOCUS _ DOWN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Back To Override Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . error _ occ urred ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTheme Ġadd Ġbutton Ġand Ġplus Ġimage ĊĠĠĠĠĠĠĠ Ġadd Override Text . setTextColor ( Theme Prefs . button Color ) ĊĠĠĠĠĠĠĠ Ġplus . setColor Filter ( Theme Prefs . button Color ) ĊĊĠĠĠĠĠĠĠ Ġadd Override . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Edit Date Groups . add ( Due Date Group ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Overrides () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll View . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll View . full Scroll ( ScrollView . FOCUS _ DOWN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġopens Ġthe Ġassign ees Ġpage Ġto Ġsave Ġthe Ġuser Ġa Ġclick . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Container . desc endants < Assignment Override View >(). last (). assign To . perform Click () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Overrides () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Container . removeAll Views () ĊĠĠĠĠĠĠĠ Ġ// ĠLoad Ġin Ġoverrides ĊĠĠĠĠĠĠĠ Ġm Edit Date Groups . forEach Indexed Ġ{ Ġindex , Ġdue Date Group Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġassign ees Ġ= ĠArrayList < CharSequence >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠAssignment Override View ( require Activity ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( due Date Group . is Every one ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassign ees Ġ+= ĠgetString ( if Ġ( m Edit Date Groups . any Ġ{ Ġit . has Override Assign ees Ġ}) ĠR . string . every one _ else Ġelse ĠR . string . every one ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdue Date Group . group Ids . forEach Ġ{ Ġassign ees . add ( groups Mapped [ it ]?. name !! ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdue Date Group . section Ids . forEach Ġ{ Ġassign ees . add ( sections Mapped [ it ]?. name !! ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdue Date Group . student Ids . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassign ees . add ( students Mapped [ it ] !!. let Ġ{ Ġuser Ġ-> ĠP rono uns . span ( user . name , Ġuser . pr ono uns ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġv . setup Override ( index , Ġdue Date Group , Ġm Edit Date Groups . size Ġ> Ġ 1 , Ġassign ees , Ġdate Picker OnClick , Ġtime Picker OnClick , Ġremove Override Click ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠAssign ee List Fragment . make Bundle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Edit Date Groups , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsections Mapped . values . toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroups Mapped . values . toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudents Mapped . values . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Matcher . route ( require Context (), ĠRoute ( Assign ee List Fragment :: class . java , Ġm Course , Ġargs )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Back To Override Ġ= Ġv ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Container . addView ( v ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Container . desc endants < TextInput Layout >(). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . type face Ġ= ĠType face . create (" sans - serif - medium ", ĠType face . NORMAL ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Description () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠShow Ġprogress Ġbar Ġwhile Ġloading Ġdescription ĊĠĠĠĠĠĠĠ Ġdescription ProgressBar . announce For Accessibility ( getString ( R . string . loading )) ĊĠĠĠĠĠĠĠ Ġdescription ProgressBar . setVisible () ĊĠĠĠĠĠĠĠ Ġ// ĠLoad Ġdescription ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġhtml Ġhas Ġa ĠStudio ĠL TI Ġurl , Ġwe Ġwant Ġto Ġauthenticate Ġso Ġthe Ġuser Ġdoesn 't Ġhave Ġto Ġlogin Ġagain ĊĠĠĠĠĠĠĠ Ġif Ġ( Canvas WebView . contains L TI ( m Assignment . description . or Empty (), Ġ" UTF - 8 ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Editor . set Html ( Dis cussion Utils . create L TI Place Hold ers ( require Context (), Ġm Assignment . description Ġ?: Ġ"") Ġ{ Ġ_, Ġplaceholder Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace Holder List . add ( placeholder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . assignment Description Content Description ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . r ce _ empty _ description ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTheme Prefs . brand Color , ĠTheme Prefs . button Color ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Editor . set Html ( m Assignment . description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . assignment Description Content Description ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . r ce _ empty _ description ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTheme Prefs . brand Color , ĠTheme Prefs . button Color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġwhen Ġthe ĠR CE Ġeditor Ġhas Ġfocus Ġwe Ġwant Ġthe Ġlabel Ġto Ġbe Ġdark er Ġso Ġit Ġmatches Ġthe Ġtitle 's Ġfunctionality ĊĠĠĠĠĠĠĠ Ġdescription Editor . setLabel ( assignment Desc Label , ĠR . color . default Text Dark , ĠR . color . default Text Gray ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Assignment () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠBoth Ġname Ġand Ġpoints Ġare Ġrequired ĊĠĠĠĠĠĠĠ Ġif Ġ( edit Assignment Name . text . isNull Or Blank () Ġ|| Ġedit Grade Points . text . isNull Or Blank ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// ĠValidate Ġpoints Ġpossible ĊĠĠĠĠĠĠĠ Ġval Ġpoints Possible Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDecimal Format (). parse ( edit Grade Points . text . toString ()). toDouble () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠParseException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Grade Points . error Ġ= ĠgetString ( R . string . assignment _ points _ must _ be _ a _ number ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġdue , Ġunlock , Ġand Ġlock Ġdates ĊĠĠĠĠĠĠĠ Ġif Ġ( override Container . children < Assignment Override View >(). any Ġ{ Ġit . validate Input () Ġ}) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġpost Data Ġ= ĠAssignment Post Body () ĊĠĠĠĠĠĠĠ Ġpost Data . name Ġ= Ġedit Assignment Name . text . toString () ĊĠĠĠĠĠĠĠ Ġpost Data . points Possible Ġ= Ġpoints Possible ĊĠĠĠĠĠĠĠ Ġpost Data . set Group ed Due Dates ( m Edit Date Groups ) ĊĠĠĠĠĠĠĠ Ġpost Data . description Ġ= Ġhandle L TI Place Hold ers ( place Holder List , Ġdescription Editor . html ) ĊĠĠĠĠĠĠĠ Ġpost Data . notify Of Update Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġpost Data . grading Type Ġ= Ġm Display Grade As ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġremove Ġthis Ġsection Ġwhen Ġwe Ġsupport Ġediting Ġsubmission Ġtypes ĊĠĠĠĠĠĠĠ Ġ// ĠThere Ġis Ġsome Ġweird ness Ġwith Ġthe ĠAPI Ġdealing Ġwith Ġnot Ġg ra ded Ġstuff . ĠWhen Ġyou Ġchange Ġit Ġfrom Ġnot Ġg ra ded Ġyou Ġalso ĊĠĠĠĠĠĠĠ Ġ// Ġneed Ġto Ġset Ġthe Ġsubmission Ġtype Ġto Ġbe Ġsomething . ĠWhen Ġwe Ġimplement Ġsubmission Ġtype Ġediting Ġwe Ġwon 't Ġneed Ġthis Ġhere ĊĠĠĠĠĠĠĠ Ġif ( m Assignment . grading Type Ġ== ĠNOT _ GR ADED _ TYPE Ġ&& Ġm Display Grade As Ġ!= ĠNOT _ GR ADED _ TYPE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġ" none " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubmission List Ġ= ĠlistOf ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Data . submission Types Ġ= Ġsubmission List ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Data . submission Types Ġ= Ġm Assignment . submission Types Raw ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġif Ġwe Ġwant Ġto Ġset Ġthe Ġtype Ġas Ġnot Ġg ra ded , Ġwe Ġdon 't Ġwant Ġa Ġsubmission Ġtype Ġor Ġpoints Ġpossible ĊĠĠĠĠĠĠĠ Ġif ( m Display Grade As Ġ== ĠNOT _ GR ADED _ TYPE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Ġpoints Ġto Ġ 0 Ġif Ġwe Ġaren 't Ġgrad ing Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Data . points Possible Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠNOT _ GR ADED _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubmission List Ġ= ĠlistOf ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Data . submission Types Ġ= Ġsubmission List ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġonly Ġset Ġthe Ġpublished Ġflag Ġif Ġwe Ġcan Ġun publish / publish Ġthe Ġassignment ĊĠĠĠĠĠĠĠ Ġif Ġ( m Assignment . un publish able ) Ġpost Data . published Ġ= Ġm Is Published ĊĠĠĠĠĠĠĠ Ġelse Ġpost Data . published Ġ= Ġm Assignment . published ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" EXPERIMENT AL _ FEATURE _ WARNING ") ĊĠĠĠĠĠĠĠ Ġm Put Assignment Call Ġ= Ġwe ave Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Button ?. set G one () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsaving ProgressBar . announce For Accessibility ( getString ( R . string . saving )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsaving ProgressBar . setVisible () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Assignment Ġ= Ġawait Api Ġ{ ĠAssignment Manager . edit Assignment ( m Assignment . course Id , Ġm Assignment . id , Ġpost Data , Ġit , Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssignment Updated Event ( m Assignment . id ). post () Ġ// ĠPost Ġbus Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . successfully _ updated _ assignment ) Ġ// Ġlet Ġthe Ġuser Ġknow Ġthe Ġassignment Ġwas Ġsaved ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Assignment Name . hide Keyboard () Ġ// Ġclose Ġthe Ġkeyboard ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). on Back Pressed () Ġ// Ġclose Ġthis Ġfragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Button ?. setVisible () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsaving ProgressBar . set G one () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . error _ saving _ assignment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġ@ Subscribe ( thread Mode Ġ= ĠThread Mode . MAIN , Ġsticky Ġ= Ġtrue ) ĊĠĠĠ Ġfun Ġon Assign ees Changed ( event : ĠAssign ees Updated Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġgrouped Ġdue Ġdates Ġ( Edit Date Groups ) ĊĠĠĠĠĠĠĠ Ġevent . once ( java Class . simple Name ) Ġ{ Ġdates Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Edit Date Groups Ġ= Ġdates ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Overrides () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// remove Ġit Ġso Ġwhen Ġwe Ġgo Ġto Ġanother Ġassignment Ġit Ġwon 't Ġshow Ġup Ġthere Ġtoo ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). remove Sticky Event ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout State . put Serializable ( EDIT _ DATE _ GROUP S , ĠArrayList < Due Date Group >( m Edit Date Groups )) ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġm Due Date Api Calls ?. cancel () ĊĠĠĠĠĠĠĠ Ġm Put Assignment Call ?. cancel () ĊĠĠĠĠĠĠĠ Ġm Scroll Handler . remove Callbacks ( m Scroll To Runnable ) ĊĠĠĠĠĠĠĠ Ġm Session Auth Job ?. cancel () ĊĠĠĠĠĠĠĠ Ġr ce Image Upload Job ?. cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġval ĠASS IGN MENT Ġ= Ġ" assignment " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSHO ULD _ SCROLL _ TO _ DAT ES Ġ= Ġ" should Scroll To Dates " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEDIT _ DATE _ GROUP S Ġ= Ġ" edit Date Groups " ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( course : ĠCourse , Ġargs : ĠBundle ) Ġ= ĠEdit Assignment Details Fragment (). with Args ( args ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Course Ġ= Ġcourse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġmake Bundle ( assignment : ĠAssignment , Ġscroll To Dates : ĠBoolean ): ĠBundle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Boolean ( Edit Assignment Details Fragment . SHO ULD _ SCROLL _ TO _ DAT ES , Ġscroll To Dates ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Parcelable ( Edit Assignment Details Fragment . ASSIGN MENT , Ġassignment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġargs ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ