package Ġcom . blo vote . sur veys . ui . pass ing Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . support . v 7 . app . AlertDialog Ċ import Ġandroid . view . MenuItem Ċ import Ġcom . blo vote . R Ċ import Ġcom . blo vote . app . App Ċ import Ġcom . blo vote . app . B lo vote Activity Ċ import Ġcom . blo vote . app . common . Common Progress Fragment Ċ import Ġcom . blo vote . app . common . Common Success Fragment Ċ import Ġcom . blo vote . sur veys . data . entities . Question Category Ċ import Ġcom . blo vote . sur veys . data . entities . Survey Ċ import Ġcom . blo vote . sur veys . data . entities . Survey State Ċ import Ġcom . blo vote . sur veys . domain . Sur veys Interactor Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠSurvey Activity Ġ: ĠB lo vote Activity (), ĠQuestion Pass Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġaddress Ġ: ĠString ĊĠĠĠ Ġprivate Ġvar Ġindex Ġ: ĠInt Ġ= Ġ- 1 ĊĊĠĠĠ Ġprivate Ġvar Ġdis posable Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġsur veys Interactor : ĠSur veys Interactor ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsurvey Ġ: ĠSurvey ĊĊĠĠĠ Ġprivate Ġvar Ġanswered Filter Questions Ġ: ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġan wer ed Main Questions Ġ: ĠInt Ġ= Ġ 0 ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. title Ġ= ĠgetString ( R . string . survey ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĊĠĠĠĠĠĠĠ ĠApp . app Component . inject ( this ) ĊĊĠĠĠĠĠĠĠ Ġaddress Ġ= Ġintent . extras . getString ( KEY _ ADDRESS ) ĊĠĠĠĠĠĠĠ Ġindex Ġ= Ġintent . extras . getInt ( KEY _ INDEX ) ĊĊĠĠĠĠĠĠĠ Ġupdate Question Fragment ( Survey Details Fragment . newInstance ( address , Ġindex , Ġfalse ), true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġdis posable . dispose () ĊĠĠĠĠĠĠĠ Ġdis posable Ġ= ĠComposite Disposable () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item ?. itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Finish able ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Finish able ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Finish able () Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsupport FragmentManager . find Fragment By Tag ( TAG _ QUEST ION _ FRAGMENT ) Ġ== Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! support FragmentManager . pop Back Stack Immediate (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pass Next ( pass ing Survey : ĠSurvey ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsurvey Ġ= Ġpassing Survey ĊĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġif Ġ( survey . state Ġ!= ĠSurvey State . Active ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . msg _ survey _ not _ active ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! has Not Answer ed Questions ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Question Fragment ( Common Success Fragment . newInstance ( getString ( R . string . msg _ passed _ successfully )), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( msg Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ErrorMessage ( msg ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Question Info Ġ= ĠgetNext Question Info () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonStart Answer ing Question ( next Question Info . first , Ġnext Question Info . second ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Question Answer ( question Category : ĠQuestion Category , Ġquestion Index : ĠInt , Ġanswers : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Question Fragment ( Common Progress Fragment . newInstance ( getString ( R . string . msg _ upload ing _ answer )), false ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( question Category Ġ== ĠQuestion Category . Filter Question ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable . add ( sur veys Interactor . check Answer ( survey , Ġquestion Index , Ġanswers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġresult , Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ErrorMessage ( getString ( R . string . msg _ incorrect _ answer )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : Ġsave Ġpassing Ġfact Ġto Ġsome Ġstorage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ answer ed Filter Questions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Pass Next ( survey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable . add ( sur veys Interactor . upload Answer ( survey , Ġquestion Index , Ġanswers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : Ġsave Ġpassing Ġfact Ġto Ġsome Ġstorage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ an wer ed Main Questions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Pass Next ( survey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ErrorMessage ( getString ( R . string . msg _ error _ upload ing , Ġit . message )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Not Answer ed Questions () Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsurvey . filter Questions Count Ġ> Ġanswered Filter Questions Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurvey . questions Count Ġ> Ġan wer ed Main Questions ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetNext Question Info () Ġ: ĠPair < Question Category , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( survey . filter Questions Count Ġ> Ġanswered Filter Questions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( Question Category . Filter Question , Ġanswered Filter Questions ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( survey . questions Count Ġ> Ġan wer ed Main Questions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( Question Category . Main Question , Ġan wer ed Main Questions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠonStart Answer ing Question ( category : ĠQuestion Category , Ġindex : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogress Fragment Ġ= ĠCommon Progress Fragment . newInstance ( getString ( R . string . msg _ loading _ question _ details )) ĊĠĠĠĠĠĠĠ Ġupdate Question Fragment ( progress Fragment , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġneed To Load Details Ġ= Ġif Ġ( category Ġ== ĠQuestion Category . Main Question ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurvey . questions . size Ġ<= Ġindex Ġ|| Ġsurvey . questions [ index ]. title . isEmpty () ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurvey . filter Q ues ions . size Ġ<= Ġindex Ġ|| Ġsurvey . filter Q ues ions [ index ]. title . isEmpty () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( need To Load Details ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable . add ( sur veys Interactor . update Survey Question Info ( survey , Ġcategory , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Question ( category , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Question ( category , Ġindex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġshow Question ( category : ĠQuestion Category , Ġindex : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquestion Ġ= Ġif Ġ( category Ġ== ĠQuestion Category . Main Question ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurvey . questions [ index ] ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurvey . filter Q ues ions [ index ] ĊĊĠĠĠĠĠĠĠ Ġupdate Question Fragment ( Question Pass Fragment . newInstance ( category , Ġindex , Ġquestion ), Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow ErrorMessage ( msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . ok ) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Question Fragment ( fragment : ĠFragment , Ġclose able : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( android . R . id . content , Ġfragment , Ġif Ġ( close able ) Ġnull Ġelse ĠTAG _ QUEST ION _ FRAGMENT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG _ QUEST ION _ FRAGMENT Ġ= Ġ" hu yo - mo yo - tag " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠKEY _ ADDRESS Ġ= Ġ" address " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠKEY _ INDEX Ġ= Ġ" index " ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Start Intent ( context : ĠContext , Ġsurvey Address : ĠString , Ġindex : ĠInt ) Ġ: ĠIntent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠSurvey Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( KEY _ ADDRESS , Ġsurvey Address ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( KEY _ INDEX , Ġindex ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġintent ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }