/* Ċ Ġ* Ġ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 . android polling . app . fragments Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . text . format . Time Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroid . widget . ListView Ċ import Ġcom . dev spark . app msg . App Msg Ċ import Ġcom . in structure . android polling . app . R Ċ import Ġcom . in structure . android polling . app . activities . FragmentManager Activity Ċ import Ġcom . in structure . android polling . app . activities . Publish Poll Activity Ċ import Ġcom . in structure . android polling . app . row factories . Poll Session Row Factory Ċ import Ġcom . in structure . android polling . app . util . Application Manager Ċ import Ġcom . in structure . android polling . app . util . Constants Ċ import Ġcom . in structure . android polling . app . util . Swipe Dismiss ListView Touch Listener Ċ import Ġcom . in structure . android polling . app . util . Utils Ċ import Ġcom . in structure . canvas api 2 . Status Callback Ċ import Ġcom . in structure . canvas api 2 . managers . Pol ls Manager Ċ import Ġcom . in structure . canvas api 2 . managers . Section Manager Ċ import Ġcom . in structure . canvas api 2 . models .* Ċ import Ġcom . in structure . canvas api 2 . utils . Api Type Ċ import Ġcom . in structure . canvas api 2 . utils . Link Headers Ċ import Ġcom . in structure . p anda utils . utils . non Null Args Ċ import Ġkotlinx . android . synt hetic . main . fragment _ poll _ session _ list .* Ċ import Ġokhttp 3 . ResponseBody Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Response Ċ import Ġjava . io . File Ċ import Ġjava . io . FileWriter Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* Ċ Ċ class ĠPoll Session List Fragment Ġ: ĠPag inated List Fragment < Poll Session >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġpoll Session Callback : ĠStatus Callback < Poll Session Response >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsection Callback : ĠStatus Callback < Section >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpoll Choice Callback : ĠStatus Callback < Poll Choice Response >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġresponse Canvas Callback : ĠStatus Callback < ResponseBody >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġpoll : ĠPoll ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtouch Listener : ĠSw ipe Dismiss ListView Touch Listener ĊĊĠĠĠ Ġprivate Ġvar Ġcourse Map : ĠMap < Long , ĠCourse >? Ġ= Ġnull ĊĠĠĠ Ġ@ Suppress Lint (" Use Sparse Arrays ") ĊĠĠĠ Ġprivate Ġval Ġsection Map Ġ= ĠHashMap < Long , ĠSection >() ĊĠĠĠ Ġprivate Ġval Ġpoll Choice ArrayList Ġ= ĠArrayList < Poll Choice >() ĊĠĠĠ Ġ@ Suppress Lint (" Use Sparse Arrays ") ĊĠĠĠ Ġprivate Ġval Ġpoll Choice Map Ġ= ĠHashMap < Long , ĠPoll Choice >() ĊĊĠĠĠ Ġprivate Ġvar Ġsession Next Url : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġfrom Generate CSV Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĊĠĠĠĠĠĠĠ Ġtouch Listener Ġ= ĠSw ipe Dismiss ListView Touch Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠSw ipe Dismiss ListView Touch Listener . Dismiss Callbacks Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcan Dismiss ( position : ĠInt ): ĠBoolean Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Dismiss ( list View : ĠListView , Ġreverse Sorted Positions : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( position Ġin Ġreverse Sorted Positions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġpoll Ġthat Ġwe Ġwant Ġto Ġremove Ġafter Ġthe Ġapi Ġcall Ġreturns Ġsuccessfully ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoll Session Ġ= ĠgetItem ( position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRemove Ġthe Ġitem Ġfrom Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Item ( poll Session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDelete Ġthe Ġpoll Ġfrom Ġcanvas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPol ls Manager . delete Poll Session ( poll !!. id , Ġpoll Session . id , Ġresponse Canvas Callback !! , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠlistView . setOn Touch Listener ( touch Listener ) ĊĠĠĠĠĠĠĠ ĠlistView . setOn Scroll Listener ( touch Listener . make Scroll Listener ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġan Ġanimation Ġfor Ġadding Ġlist Ġitems ĊĠĠĠĠĠĠĠ Ġval Ġcontroller Ġ= ĠAnimation Utils . load Layout Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĠR . anim . list _ layout _ controller ) ĊĊĠĠĠĠĠĠĠ ĠlistView . layout Animation Ġ= Ġcontroller ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠConstants . PUBL ISH _ POLL _ SUCCESS Ġ|| ĠresultCode Ġ== ĠConstants . PUBL ISH _ POLL _ SUCCESS _ MULTIPLE ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsession Ġ= Ġdata . extras !!. get Parcelable < Poll Session >( Constants . POLL _ SESSION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoll Results Fragment Ġ= ĠPoll Results Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . put Parcelable ( Constants . POLL _ DATA , Ġpoll ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . put Parcelable ( Constants . POLL _ SESSION , Ġsession ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoll Results Fragment . arguments Ġ= Ġbundle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠFragment Manager Activity ). remove Fragment ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠFragment Manager Activity ). swap Fragments ( poll Results Fragment , ĠPoll Results Fragment :: class . java . simple Name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreload Data () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item !!. itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ upload _ csv Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Generate CSV Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPol ls Manager . getFirst Page Poll Choices ( poll !!. id , Ġpoll Choice Callback !! , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Click Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġpublish Poll . setOnClickListener Ġ{ ĠstartActivity For Result ( Publish Poll Activity . create Intent ( require Context (), Ġpoll !!. id ), ĠConstants . PUBL ISH _ POLL _ REQUEST ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate CSV () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcsv Ġ= Ġ" Poll ĠTitle , ĠPoll ĠSession , ĠCourse ĠName , ĠSection ĠName , ĠUser ĠName , ĠAnswer , ĠDate \ n " ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġitem Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoll Session Ġ= ĠgetItem ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( poll Session . poll Sub missions Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( poll Submission Ġin Ġpoll Session . poll Sub missions !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNow Ġadd Ġall Ġthe Ġnecessary Ġstuff Ġto Ġthe Ġcsv Ġstring ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsv Ġ+= Ġpoll !!. question Ġ+ Ġ"," ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsv Ġ+= Ġpoll Session . id . toString () Ġ+ Ġ"," ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsv Ġ+= Ġcourse Map ?. get ( poll Session . course Id )?. name Ġ+ Ġ"," ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsv Ġ+= Ġsection Map [ poll Session . course Section Id ]?. name Ġ+ Ġ"," ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsv Ġ+= Ġpoll Submission . userId . toString () Ġ+ Ġ"," ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġwe Ġhave Ġthe Ġpoll Ġchoice Ġinformation Ġso Ġwe Ġcan Ġinclude Ġthe Ġpoll Ġchoice Ġtext Ġinstead ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġof Ġjust Ġan Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsv Ġ+= Ġif Ġ( poll Choice Map . containsKey ( poll Submission . poll Choice Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoll Choice Map [ poll Submission . poll Choice Id ]?. text Ġ+ Ġ"," ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoll Submission . poll Choice Id . toString () Ġ+ Ġ"," ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsv Ġ+= Ġpoll Submission . createdAt . toString () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsv Ġ+= Ġpoll !!. question Ġ+ Ġ"," ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsv Ġ+= Ġpoll Session . id . toString () Ġ+ Ġ"," ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsv Ġ+= Ġcourse Map ?. get ( poll Session . course Id )?. name Ġ+ Ġ"," ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsv Ġ+= Ġsection Map [ poll Session . course Section Id ]?. name Ġ+ Ġ"," ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsv Ġ+= Ġ"" Ġ+ Ġ"," ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsv Ġ+= Ġ"" Ġ+ Ġ"," ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsv Ġ+= Ġpoll Session . createdAt . toString () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġto Ġmake Ġsure Ġthere Ġis Ġexternal Ġstorage ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠEnvironment . get External Storage State () ĊĠĠĠĠĠĠĠ Ġif Ġ( Environment . MEDIA _ MOUNT ED Ġ!= Ġstate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIt 's Ġnot Ġthere , Ġso Ġthe Ġreset Ġof Ġthis Ġwon 't Ġwork . ĠLet Ġthe Ġuser Ġknow . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Msg . makeText ( activity , ĠgetString ( R . string . error Generating CSV ), ĠApp Msg . STYLE _ ERROR ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠFile ( Environment . get External Storage Directory (). absolute Path , ĠgetString ( R . string . generated CSV Folder Name )) ĊĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġthe Ġdirectory Ġexists . ĊĠĠĠĠĠĠĠ Ġval Ġsuccess Ġ= Ġpath . mkdir s () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDid n 't Ġactually Ġcreate Ġthe Ġpath , Ġso Ġnow Ġcheck Ġif Ġit 's Ġa Ġdirectory Ġ( if Ġit 's Ġalready Ġcreated Ġmkdir s Ġwill ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreturn Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! path . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIt 's Ġnot Ġa Ġdirectory Ġand Ġwasn 't Ġcreated , Ġso Ġwe Ġneed Ġto Ġreturn Ġwith Ġan Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Msg . makeText ( activity , ĠgetString ( R . string . error Generating CSV ), ĠApp Msg . STYLE _ ERROR ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠTime () ĊĠĠĠĠĠĠĠ Ġnow . set To Now () ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( path , Ġ" csv _" Ġ+ Ġnow . format 3 3 3 9 ( false ) Ġ+ Ġ". csv ") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWrite Ġthe Ġstring Ġto Ġa Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠFile Writer ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write ( csv ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUnable Ġto Ġcreate Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Msg . makeText ( activity , ĠgetString ( R . string . error Generating CSV ), ĠApp Msg . STYLE _ ERROR ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠFile Ġis Ġgenerated , Ġnot Ġshare Ġit ĊĠĠĠĠĠĠĠ Ġval Ġshare Intent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġshare Intent . action Ġ= ĠIntent . ACTION _ SEND ĊĠĠĠĠĠĠĠ Ġshare Intent . putExtra ( Intent . EXTRA _ STREAM , ĠUri . from File ( file )) ĊĠĠĠĠĠĠĠ Ġshare Intent . type Ġ= Ġ" text / csv " ĊĠĠĠĠĠĠĠ ĠstartActivity ( Intent . create Chooser ( share Intent , ĠgetString ( R . string . share CSV ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Empty View Layout Code (): ĠInt Ġ= ĠR . layout . empty _ view _ poll _ sessions ĊĊĠĠĠ Ġoverride Ġfun Ġget Root Layout Code (): ĠInt Ġ= ĠR . layout . fragment _ poll _ session _ list ĊĊĠĠĠ Ġoverride Ġfun Ġconfigure Views ( root View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . configure Views ( root View ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( arguments Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoll Ġ= Ġnon Null Args . get Parcelable ( Constants . POLL _ DATA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( poll Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion !!. text Ġ= Ġpoll !!. question ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsetup Click Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Row View For Item ( item : ĠPoll Session , ĠconvertView : ĠView ?, Ġposition : ĠInt ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġcourse Map Ġ= ĠUtils . create Course Map ( Application Manager . getC ourse List ( activity )) ĊĠĠĠĠĠĠĠ Ġval Ġcourse Name Ġ= Ġcourse Map ?. get ( item . course Id )?. name Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ Ġvar Ġsection Name Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( section Map . containsKey ( item . course Section Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsection Name Ġ= Ġsection Map [ item . course Section Id ] !!. name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPoll Session Row Factory . build Row View ( layout Inflater (), Ġrequire Activity (), Ġcourse Name , Ġsection Name , Ġitem . is Published , ĠconvertView ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Footer Layout Code (): ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġget Title (): ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Row Click ( item : ĠPoll Session , Ġposition : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpoll Results Fragment Ġ= ĠPoll Results Fragment () ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġbundle . put Parcelable ( Constants . POLL _ DATA , Ġpoll ) ĊĠĠĠĠĠĠĠ Ġbundle . put Parcelable ( Constants . POLL _ SESSION , Ġitem ) ĊĠĠĠĠĠĠĠ Ġpoll Results Fragment . arguments Ġ= Ġbundle ĊĠĠĠĠĠĠĠ Ġ( activity Ġas ĠFragment Manager Activity ). swap Fragments ( poll Results Fragment , ĠPoll Results Fragment :: class . java . simple Name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġare Items Sorted (): ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġoverride Ġfun Ġload First Page () Ġ= ĠPol ls Manager . getFirst Page Poll Sessions ( poll !!. id , Ġpoll Session Callback !! , Ġtrue ) ĊĠĠĠ Ġoverride Ġfun Ġload Next Page ( next URL : ĠString ) Ġ= ĠPol ls Manager . getNext Page Poll Sessions ( next URL , Ġpoll Session Callback !! , Ġtrue ) ĊĠĠĠ Ġoverride Ġfun ĠgetNext URL (): ĠString ? Ġ= Ġsession Next Url ĊĠĠĠ Ġoverride Ġfun Ġset Next URL Null () Ġ{ ĊĠĠĠĠĠĠĠ Ġsession Next Url Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreset Data () Ġ= ĠUnit ĊĊĠĠĠ Ġoverride Ġfun Ġsetup Callbacks () Ġ{ ĊĠĠĠĠĠĠĠ Ġpoll Session Callback Ġ= Ġobject Ġ: ĠStatus Callback < Poll Session Response >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( response : ĠResponse < Poll Session Response >, Ġlink Headers : ĠLink Headers , Ġtype : ĠApi Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ== Ġnull Ġ|| Ġtype . is Cache ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoll Sessions Ġ= Ġresponse . body () !!. poll Sessions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Next Url Ġ= Ġlink Headers . next Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( poll Sessions Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( poll Session Ġin Ġpoll Sessions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item ( poll Session ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSection Manager . get Section ( poll Session . course Id , Ġpoll Session . course Section Id , Ġsection Callback !! , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finished ( type : ĠApi Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( swipe Refresh Layout Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsection Callback Ġ= Ġobject Ġ: ĠStatus Callback < Section >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( response : ĠResponse < Section >, Ġlink Headers : ĠLink Headers , Ġtype : ĠApi Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ== Ġnull Ġ|| Ġtype . is Cache ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection Map [ it . id ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpoll Choice Callback Ġ= Ġobject Ġ: ĠStatus Callback < Poll Choice Response >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( response : ĠResponse < Poll Choice Response >, Ġlink Headers : ĠLink Headers , Ġtype : ĠApi Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ== Ġnull Ġ|| Ġtype . is Cache ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoll Choices Ġ= Ġit . poll Choices ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( poll Choices Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoll Choice ArrayList . addAll ( poll Choices ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġlink Headers . next URL Ġis Ġnull Ġit Ġmeans Ġwe Ġhave Ġall Ġthe Ġchoices , Ġso Ġwe Ġcan Ġgo Ġto Ġthe Ġedit Ġpoll Ġpage Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġor Ġgenerate Ġthe ĠCSV , Ġdepending Ġon Ġwhich Ġaction Ġthey Ġselected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Status Callback . more Calls Exist ( link Headers )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( from Generate CSV ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGenerate Ġa Ġmap Ġfrom Ġthe Ġarray Ġlist Ġof Ġpoll Ġchoices ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( choice Ġin Ġpoll Choice ArrayList ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoll Choice Map [ choice . id ] Ġ= Ġchoice ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate CSV () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadd Question Fragment Ġ= ĠAdd Question Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPopulate Ġthe Ġcurrent Ġdata Ġwith Ġthe Ġbundle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . put Parcelable ( Constants . POLL _ B UNDLE , Ġpoll ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . put Parcelable ArrayList ( Constants . POLL _ CHO ICES , Ġpoll Choice ArrayList ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Question Fragment . arguments Ġ= Ġbundle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠFragment Manager Activity ). swap Fragments ( add Question Fragment , ĠAdd Question Fragment :: class . java . simple Name , ĠR . anim . slide _ in _ from _ bottom , Ġ 0 , Ġ 0 , ĠR . anim . slide _ out _ to _ bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOtherwise , Ġget Ġthe Ġnext Ġgroup Ġof Ġpoll Ġchoices . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPol ls Manager . getNext Page Poll Choices ( link Headers . next Url !! , Ġpoll Choice Callback !! , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finished ( type : ĠApi Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( swipe Refresh Layout Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresponse Canvas Callback Ġ= Ġobject Ġ: ĠStatus Callback < ResponseBody >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fail ( call : ĠCall < ResponseBody > ?, Ġerror : ĠThrowable , Ġresponse : ĠResponse < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Msg . makeText ( activity , ĠgetString ( R . string . error Deleting Poll Session ), ĠApp Msg . STYLE _ ERROR ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġdidn 't Ġactually Ġdelete Ġanything , Ġbut Ġwe Ġremoved Ġthe Ġitem Ġfrom Ġthe Ġlist Ġto Ġmake Ġthe Ġanimation Ġsm oo ther , Ġso Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlets Ġget Ġthe Ġpoll Ġsessions Ġagain ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreload Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ