package Ġio . code labs . digit utor . view . kotlin Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog Ċ import Ġcom . af ol le st ad . material dialogs . datetime . dateTime Picker Ċ import Ġcom . af ol le st ad . material dialogs . list . list Items Single Choice Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġio . code labs . digit utor . R Ċ import Ġio . code labs . digit utor . core . base . Base Activity Ċ import Ġio . code labs . digit utor . core . datasource . remote . Firebase DataSource Ċ import Ġio . code labs . digit utor . core . util . Async Callback Ċ import Ġio . code labs . digit utor . core . util . Input Validator Ċ import Ġio . code labs . digit utor . data . model . Parent Ċ import Ġio . code labs . digit utor . data . model . Subject Ċ import Ġio . code labs . digit utor . data . model . W ard Ċ import Ġio . code labs . digit utor . databinding . Activity Add Assignment Binding Ċ import Ġio . code labs . digit utor . view . adapter . Users Adapter Ċ import Ġio . code labs . recyclerview . Grid Item Divider Decoration Ċ import Ġio . code labs . recyclerview . Slide In Item Animator Ċ import Ġio . code labs . sdk . util . debug Log Ċ import Ġio . code labs . sdk . util . toast Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* ĠAssign ments Ġscreen Ċ Ġ* ĠAllows Ġa Ġt utor Ġto Ġsend Ġassignment Ġto Ġhis Ġor Ġher Ġstudents Ċ Ġ*/ Ċ class ĠAssignment Activity Ġ: ĠBase Activity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Add Assignment Binding ĊĠĠĠ Ġprivate Ġvar ĠfilePath : ĠUri ? Ġ= ĠUri . EMPTY ĊĠĠĠ Ġprivate Ġval Ġnames Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġprivate Ġval Ġsubjects Ġ= Ġmutable ListOf < Subject >() Ċ // ĠĠĠ Ġprivate Ġval Ġw ards Ġ= Ġmutable ListOf < W ard >() ĊĠĠĠ Ġprivate Ġvar Ġw ard : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠstartDate : ĠLong ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠendDate : ĠLong ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsubject : ĠSubject ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġparents : ĠMutable List < Parent > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . set ContentView ( this , ĠR . layout . activity _ add _ assignment ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar ) ĊĠĠĠĠĠĠĠ Ġbinding . toolbar . set Navigation OnClickListener Ġ{ Ġon Back Pressed () Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . show List Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsetup T utor () ĊĠĠĠĠĠĠĠ Ġsetup Clients () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Clients () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠUsers Adapter ( this ) Ġ{ Ġitem , Ġis Long Click Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Long Click ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw ard Ġ= Ġitem . key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ("${ item . name } Ġselected ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . wards Grid . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . wards Grid . item Animator Ġ= ĠSlide In Item Animator () ĊĠĠĠĠĠĠĠ Ġbinding . wards Grid . addItem Decoration ( Grid Item Divider Decoration ( this , ĠR . dim en . divider _ height , ĠR . color . divider )) ĊĠĠĠĠĠĠĠ Ġbinding . wards Grid . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġbinding . wards Grid . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ ĠFirebase DataSource . getAll Clients ( this , Ġfire store , Ġprefs , Ġobject Ġ: ĠAsync Callback < Mutable List < Parent > ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( response : ĠMutable List < Parent > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Ġ!= Ġnull ) Ġparents . addAll ( response . to Mutable List ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase DataSource . get W ards ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Assignment Activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠAsync Callback < Mutable List < W ard > ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( ward Response : ĠMutable List < W ard > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ward Response Ġ!= Ġnull ) Ġadapter . addData ( ward Response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( error : ĠString ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( error : ĠString ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup T utor () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSn ackbar Ġto Ġshow Ġnotification Ġon Ġthe Ġscreen Ġfor Ġthe Ġcurrent Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġsn ackbar Ġ= ĠSn ackbar . make ( binding . container , Ġ" Loading Ġall Ġsubjects Ġfor Ġyou ", ĠSn ackbar . LENGTH _ LONG ) ĊĊĠĠĠĠĠĠĠ ĠFirebase DataSource . getT utor Subject s ( this , Ġfire store , Ġprefs . key , Ġobject Ġ: ĠAsync Callback < List < Subject >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( error : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . setText ( error Ġ?: Ġ" An Ġunknown Ġerror Ġoccurred "). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( response : ĠList < Subject > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Ġ!= Ġnull Ġ&& Ġresponse . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubjects . addAll ( response ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( _, Ġname ) Ġin Ġresponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnames . add ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Log ( names ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase DataSource . fetch All Subject s ( this @ Assignment Activity , Ġfire store , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( names . isEmpty ()) Ġsn ackbar . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( names . isNotEmpty ()) Ġsn ackbar . setText (" Subject s Ġloaded Ġsuccessfully "). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Assignment ( view : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( filePath Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Dialog ( this ). show Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle ( text Ġ= Ġ" Select Ġa Ġsubject ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Items Single Choice ( items Ġ= Ġnames , ĠwaitFor Positive Button Ġ= Ġfalse ) Ġ{ Ġdialog , Ġindex , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= Ġsubjects [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Log ( subject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Assignment Activity . subject Ġ= Ġsubject ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Input Validator . has Valid Input ( binding . comments . text . toString ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( startDate Ġ!= Ġnull Ġ&& ĠendDate Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Log (" Start : Ġ$ startDate . ĠEnd : Ġ$ endDate . ĠSubject : Ġ${ subject . key }. ĠW ard : Ġ$ ward ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost ( subject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Dialog ( this @ Assignment Activity ). show Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle ( text Ġ= Ġ" Set ĠStart ĠDate ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdateTime Picker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow 2 4 Hours View Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Future DateTime Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġdialog , Ġdatetime Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate Ġ= Ġdatetime . time In Millis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpick EndDate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġtoast (" Please Ġenter Ġa Ġcomment Ġto Ġthis Ġassignment ...", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel able ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel On Touch Outside ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" Please Ġattach Ġan Ġassignment Ġfile Ġfirst ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost ( subject : ĠSubject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġio Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparents . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . wards . contains ( ward )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase DataSource . send Assignment ( firestore , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstorage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . comments . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfilePath . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw ard , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendDate !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠAsync Callback < Void ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( response : ĠVoid ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Log (" Assignment Ġuploaded Ġsuccessfully ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( error : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Log ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Log (" Sending Ġassignment Ġto Ġw ard ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfinish After Transition () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpick EndDate () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠPick Ġan Ġend Ġdate ĊĠĠĠĠĠĠĠ ĠMaterial Dialog ( this @ Assignment Activity ). show Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle ( text Ġ= Ġ" Set ĠEnd ĠDate ...") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdateTime Picker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow 2 4 Hours View Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Future DateTime Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġdialog , Ġdatetime Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendDate Ġ= Ġdatetime . time In Millis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost ( subject !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* private Ġfun Ġpick W ard () Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial Dialog ( this @ Assignment Activity , ĠBottom Sheet ()). show Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Items ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġw ards , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwaitFor Positive Button Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġdialog , Ġ_, Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw ard Ġ= Ġitem . key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Log ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( subject Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup T utor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ grid Items ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost ( subject !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}*/ ĊĊĠĠĠ Ġfun Ġpick Assignment ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ OPEN _ DOCUMENT ) ĊĠĠĠĠĠĠĠ Ġintent . add Category ( Intent . CATEGORY _ OP ENABLE ) ĊĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ"* /* " ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġfile Ġtypes ĊĠĠĠĠĠĠĠ Ġval Ġmime Types Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" application / pdf ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" text / plain ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" application / vnd . ms - word ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" application / vnd . ms - excel ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" application / vnd . ms - power point ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" application / vnd . open xm lform ats - off iced ocument . word processing ml . document ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" application / vnd . open xm lform ats - off iced ocument . spreadsheet ml . sheet ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" application / vnd . open xm lform ats - off iced ocument . presentation ml . presentation " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ MIME _ TYPES , Ġmime Types ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( intent . resolve Activity ( package Manager ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠRC _ FILE ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" No Ġapplication Ġavailable Ġfor Ġthis Ġaction ", Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠRC _ FILE Ġ&& ĠresultCode Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull Ġ&& Ġdata . data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfilePath Ġ= Ġdata . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Log ( filePath ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . file Url Ġ= Ġ" File Ġattached Ġsuccessfully " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" Unable Ġto Ġpick Ġfile ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . refresh _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item ?. itemId Ġ== ĠR . id . menu _ refresh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnames . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubjects . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup T utor () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠRC _ FILE Ġ= Ġ 2 2 ĊĠĠĠ Ġ} Ċ } Ċ