package Ġcom . e ok oe . s ag ui . features . sur veys . survey Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . drawable . Anim atable Ċ import Ġandroid . location . Location Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . design . widget . TextInput Layout Ċ import Ġandroid . support . v 7 . widget . GridLayout Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . widget . RadioButton Ċ import Ġandroid . widget . Radio Group Ċ import Ġandroid . widget . TextView Ċ import Ġcom . e ok oe . s ag ui . R Ċ import Ġcom . e ok oe . s ag ui . data . entities .* Ċ import Ġcom . e ok oe . s ag ui . extensions .* Ċ import Ġcom . e ok oe . s ag ui . features . base . view . Base Activity Ċ import Ġcom . e ok oe . s ag ui . features . base . view . View Location Ċ import Ġcom . e ok oe . s ag ui . features . base . view . View Presenter Ċ import Ġcom . e ok oe . s ag ui . features . sur veys . survey . note . Note Activity Ċ import Ġcom . e ok oe . s ag ui . utils . Location Helper Ċ import Ġcom . e ok oe . s ag ui . widgets . Check able ImageView Ċ import Ġcom . e ok oe . s ag ui . widgets . dialog . AlertDialog Fragment Ċ import Ġcom . e ok oe . s ag ui . widgets . dialog . Loading Dialog Ċ import Ġcom . facebook . draw ee . backends . pipeline . F resco Ċ import Ġcom . facebook . draw ee . controller . Base Controller Listener Ċ import Ġcom . facebook . draw ee . view . Simple Draw ee View Ċ import Ġcom . facebook . image pipeline . image . Image Info Ċ import Ġcom . facebook . image pipeline . request . Image Request Ċ import Ġcom . jak ew h art on . r xb ind ing 2 . widget . Rx TextView Ċ import Ġkotlinx . android . synt hetic . main . activity _ questions .* Ċ import Ġkotlinx . android . synt hetic . main . content _ questions .* Ċ import Ġorg . k oin . android . ext . android . inject ĊĊ Ċ /** Ċ Ġ* Ġ@ author ĠPed ro ĠSil va Ċ Ġ* Ġ@ since Ġ 1 6 / 0 8 / 1 7 Ċ Ġ*/ Ċ class ĠSurvey Activity Ġ: ĠBase Activity (), ĊĠĠĠĠĠĠĠ ĠSurvey Contract . View , ĠView Presenter < Survey Contract . Presenter >, ĊĠĠĠĠĠĠĠ ĠView Location , ĠLocation Helper . On Location Received Listener Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġpresenter Ġby Ġinject < Survey Contract . Presenter >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprogress Dialog : ĠLoading Dialog ĊĠĠĠ Ġprivate Ġvar Ġsubmissions Id : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlocation : ĠLat Long ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġvar Ġlocation Helper Ġ= ĠLocation Helper () ĊĊĠĠĠ Ġvar Ġquestion Box Opened : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġvar Ġcurrent Progress : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ questions ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetUp ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setUp ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġshow Back Button () ĊĠĠĠĠĠĠĠ Ġprogress Dialog Ġ= ĠLoading Dialog . newInstance ( getString ( R . string . sending _ answers )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġinit ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcategory : ĠCategory Ġ= Ġintent . extras . get Parcelable ( EXTRA _ CATEGORY ) ĊĠĠĠĠĠĠĠ Ġtitle Ġ= ĠgetString ( R . string . title _ activity _ survey , Ġcategory . name . toLowerCase ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġsurvey : ĠSurvey Ġ= Ġintent . extras . get Parcelable ( EXTRA _ SUR VE Y ) ĊĠĠĠĠĠĠĠ Ġpresenter . set Survey ( survey ) ĊĊĠĠĠĠĠĠĠ Ġbtn Close . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Questions () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbtn Start . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request Location ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Location Permission ( R . string . title _ request _ location _ permission , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . message _ request _ location _ permission , ĠREQUEST _ PERMISSION _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbtn No . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurvey Answer ed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbtn Yes . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( Note Activity . get Intent ( this @ Survey Activity , Ġsubmissions Id !! ), ĠREQUEST _ CODE _ NOTES ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( question Box Opened ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Start . perform Click () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! rl Questions Box . is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . back () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Question ( question : ĠQuestion , Ġanswer : ĠAnswer ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġquestion Box Opened Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ(! rl Questions Box . is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback drop . show Animated () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrl Questions Box . show Sl iding Top () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . status Bar Overlay () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġload Question ( question , Ġanswer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Progress ( index : ĠInt , Ġsize : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Progress Ġ= Ġindex ĊĠĠĠĠĠĠĠ Ġcircle Progress . max Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġcircle Progress . progress Ġ= Ġindex . toFloat () ĊĊĠĠĠĠĠĠĠ Ġhorizontal Progress . max Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġhorizontal Progress . progress Ġ= Ġindex ĊĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġsize Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Next . text Ġ= ĠgetString ( R . string . next ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Next . text Ġ= ĠgetString ( R . string . send ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhide Questions () Ġ{ ĊĠĠĠĠĠĠĠ Ġquestion Box Opened Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠĠĠĠĠ Ġrl Questions Box . hide Sl iding Bottom () ĊĠĠĠĠĠĠĠ Ġback drop . hide Animated () ĊĠĠĠĠĠĠĠ Ġwindow . restore StatusBar Color () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfinalize ( answers : ĠList < Answer >) Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Questions () ĊĠĠĠĠĠĠĠ Ġpresenter . send Answers ( answers , Ġlocation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġanswers Sent ( submissions : ĠSub missions ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactions Start . hide () ĊĠĠĠĠĠĠĠ Ġactions Final . show () ĊĠĠĠĠĠĠĠ Ġsubmissions Id Ġ= Ġsubmissions . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Answers Exists () Ġ{ ĊĠĠĠĠĠĠĠ Ġtv Info Title . setText ( R . string . all _ questions _ answer ed ) ĊĠĠĠĠĠĠĠ Ġtv Info Msg . setText ( R . string . thanks ) ĊĠĠĠĠĠĠĠ Ġbtn Start . disable () ĊĠĠĠĠĠĠĠ Ġbtn Start . is Clickable Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Answers Not Exists () Ġ{ ĊĠĠĠĠĠĠĠ Ġbtn Start . enable () ĊĠĠĠĠĠĠĠ Ġbtn Start . is Clickable Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress Dialog . show ( support FragmentManager ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhide Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress Dialog . dismiss () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Error ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Loading () ĊĠĠĠĠĠĠĠ Ġbtn Start . setText ( R . string . send _ again ) ĊĠĠĠĠĠĠĠ ĠAlertDialog Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" F al ha Ġao Ġenv iar Ġresp ost as " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġif Ġ( error . error Type Ġ== ĠError Type . CONNECTION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Por Ġfavor Ġver ifique Ġsua Ġinternet Ġe Ġt ente Ġnov amente " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ" O corre u Ġum Ġerro Ġin ex per ado .\ n T ente Ġnov amente Ġmais Ġtar de " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġprivate Ġfun Ġrequest Location (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has Location Permission ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Helper . request Location ( this , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ CODE _ NOTES ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠRESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurvey Answer ed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ PERMISSION _ LOCATION Ġ&& Ġgrant Results . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Location () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsurvey Answer ed () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Result ( RESULT _ OK ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Question ( question : ĠQuestion , Ġanswer : ĠAnswer ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtv Survey Title . text Ġ= Ġquestion . name ĊĠĠĠĠĠĠĠ Ġbtn Next . disable () ĊĠĠĠĠĠĠĠ Ġif Ġ( question . type Ġ!= ĠQuestion . Type . TEXT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrl Answer . removeAll Views () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ( question . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQuestion . Type . TEXT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild View Text ( question , Ġanswer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQuestion . Type . MULTIPLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild View Multiple ( question , Ġanswer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQuestion . Type . TRA FF IC _ LIGHT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild View Traffic Light ( question , Ġanswer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild View Text ( question : ĠQuestion , Ġanswer : ĠAnswer ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġview Answer Ġ= ĠfindViewById < TextInput Layout ? >( R . id . answer Text ) ĊĠĠĠĠĠĠĠ Ġif Ġ( view Answer Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrl Answer . removeAll Views () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Answer Ġ= Ġlayout Inflater . inflate ( R . layout . answer _ text , Ġrl Answer , Ġfalse ) Ġas ĠText Input Layout ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRx TextView . text Change Events ( view Answer . edit Text !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Next . isEnabled Ġ= Ġit . text (). isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Answer . edit Text ?. setOn Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( btn Next . isEnabled Ġ&& Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ NEXT Ġ|| Ġaction Id Ġ== ĠEditor Info . IME _ ACTION _ DONE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Next . perform Click () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrl Answer . addView ( view Answer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview Answer . edit Text !!. setText ( answer ?. value ) ĊĠĠĠĠĠĠĠ Ġview Answer . edit Text !!. setSelection ( answer ?. value ?. length Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġshow Keyboard ( view Answer . edit Text !! ) ĊĠĠĠĠĠĠĠ Ġbtn Next . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . answer ( question . id , Ġview Answer !!. edit Text ?. text . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild View Multiple ( question : ĠQuestion , Ġanswered : ĠAnswer ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Answer Ġ= Ġlayout Inflater . inflate ( R . layout . answer _ multiple , Ġrl Answer , Ġfalse ) Ġas ĠGrid Layout ĊĠĠĠĠĠĠĠ Ġvar Ġanswer Selected : ĠAnswer ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġanswer Selected View : ĠRadio Button ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġquestion . answers ?. forEach Ġ{ Ġanswer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġlayout Inflater . inflate ( R . layout . answer _ multiple _ radio , Ġview Answer , Ġfalse ) Ġas ĠRadio Button ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . text Ġ= Ġanswer . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setOn Checked ChangeListener Ġ{ Ġbutton , Ġchecked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( checked Ġ&& Ġbutton Ġ!= Ġanswer Selected View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanswer Selected View ?. isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanswer Selected View Ġ= Ġbutton Ġas ĠRadio Button ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanswer Selected Ġ= Ġanswer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Next . enable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . isChecked Ġ= Ġanswer . value Ġ== Ġanswered ?. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Answer . addView ( view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrl Answer . addView ( view Answer ) ĊĠĠĠĠĠĠĠ Ġbtn Next . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . answer ( question . id , Ġanswer Selected !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild View Traffic Light ( question : ĠQuestion , Ġanswered : ĠAnswer ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Answer Ġ= Ġlayout Inflater . inflate ( R . layout . answer _ traffic _ light , Ġrl Answer , Ġfalse ) Ġas ĠRadio Group ĊĠĠĠĠĠĠĠ Ġvar Ġanswer Selected : ĠAnswer ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġrl Answer . addView ( view Answer ) ĊĠĠĠĠĠĠĠ Ġquestion . answers ?. forEach Ġ{ Ġanswer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Id Ġ= Ġresources . getIdentifier ( answer . unit ?. name ?. toLowerCase (), Ġ" id ", ĠpackageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck Ġ= Ġview Answer . findViewById < Check able ImageView >( res Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( answer . image Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck . controller Ġ= ĠF resco . new Draw ee Controller Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setImage Request ( Image Request . from Uri ( answer . image )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Controller Listener ( My Controller Listener ( check )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(( check . parent Ġas ĠViewGroup ). getChild At ( 1 ) Ġas ĠTextView ). text Ġ= Ġanswer . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck . setOn Checked ChangeListener ( object Ġ: ĠCheck able ImageView . On Checked ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon CheckedChanged ( view : ĠCheck able ImageView , Ġchecked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( checked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanswer Selected Ġ= Ġanswer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Next . enable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck . isChecked Ġ= Ġanswer . unit Ġ== Ġanswered ?. unit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbtn Next . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . answer ( question . id , Ġanswer Selected !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Location Received ( location : ĠLocation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . location Ġ= ĠLat Long ( location . latitude , Ġlocation . longitude ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout State . put Int ( STATE _ CURRENT _ PROGRESS , Ġcurrent Progress ) ĊĠĠĠĠĠĠĠ Ġout State . put Boolean ( STATE _ QUEST ION _ BOX _ OPEN ED , Ġquestion Box Opened ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrestore InstanceState ( savedInstanceState : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Progress Ġ= ĠsavedInstanceState . getInt ( STATE _ CURRENT _ PROGRESS ) ĊĠĠĠĠĠĠĠ Ġquestion Box Opened Ġ= ĠsavedInstanceState . getBoolean ( STATE _ QUEST ION _ BOX _ OPEN ED ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= ĠSurvey Activity :: class . simple Name !! ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠEX TRA _ CATEGORY Ġ= Ġ" EXTRA _ CATEGORY " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠEX TRA _ SUR VE Y Ġ= Ġ" EXTRA _ SUR VE Y " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSTATE _ CURRENT _ PROGRESS Ġ= Ġ" STATE _ CURRENT _ PROGRESS " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSTATE _ QUEST ION _ BOX _ OPEN ED Ġ= Ġ" STATE _ QUEST ION _ BOX _ OPEN ED " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠREQUEST _ CODE _ NOTES Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠREQUEST _ PERMISSION _ LOCATION Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Intent ( context : ĠContext , Ġcategory : ĠCategory , Ġsurvey : ĠSurvey ): ĠIntent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠSurvey Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ CATEGORY , Ġcategory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ SUR VE Y , Ġsurvey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġintent ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠMy Controller Listener ( private Ġval Ġimage : ĠSimple Draw ee View ) Ġ: ĠBaseController Listener < Image Info >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Final Image Set ( id : ĠString ?, Ġimage Info : ĠImage Info ?, Ġanim atable : ĠAnim atable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage . setBackground Resource ( R . drawable . bg _ check _ traffic _ light _ square ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( id : ĠString , Ġthrowable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Draw ee Update ", Ġ" Image Ġfailed Ġto Ġload : Ġ" Ġ+ Ġthrowable . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }