/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 ĠM are k ĠS abo Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcz . mun i . fi . um ime ces ky . game . fl appy Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . RadioButton Ċ import Ġandroid . widget . Seek Bar Ċ import Ġandroid . widget . TextView Ċ import Ġcz . mun i . fi . um ime ces ky . R Ċ import Ġcz . mun i . fi . um ime ces ky . game . ball . heading TextView Ċ import Ġcz . mun i . fi . um ime ces ky . enums . Difficulty Ċ import Ġcz . mun i . fi . um ime ces ky . enums . Difficulty . Companion . difficulty Names Ċ import Ġcz . mun i . fi . um ime ces ky . enums . Gap . Companion . g aps Ċ import Ġcz . mun i . fi . um ime ces ky . enums . to Difficulty Ċ import Ġcz . mun i . fi . um ime ces ky . game . shared . model . Race Concept Ċ import Ġcz . mun i . fi . um ime ces ky . prefs Ċ import Ġcz . mun i . fi . um ime ces ky . game . shared . util . Constant Ċ import Ġorg . jetbrains . ank o . An ko View Dsl Marker Ċ import Ġorg . jetbrains . ank o ._ LinearLayout Ċ import Ġorg . jetbrains . ank o . alert Ċ import Ġorg . jetbrains . ank o . custom View Ċ import Ġorg . jetbrains . ank o . dip Ċ import Ġorg . jetbrains . ank o . linear Layout Ċ import Ġorg . jetbrains . ank o . padding Ċ import Ġorg . jetbrains . ank o . radioButton Ċ import Ġorg . jetbrains . ank o . radio Group Ċ import Ġorg . jetbrains . ank o . scroll View Ċ import Ġorg . jetbrains . ank o . seek Bar Ċ import Ġorg . jetbrains . ank o . startActivity Ċ import Ġorg . jetbrains . ank o . textView Ċ import Ġorg . jetbrains . ank o . verticalLayout Ċ Ċ class ĠFl appy Settings Dialog Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext ĊĠĠĠ Ġprivate Ġval Ġrace Concept : ĠRace Concept ĊĊĠĠĠ Ġ@ Suppress (" Convert Secondary Constructor To Primary ") ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġrace Concept : ĠRace Concept ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( race Concept Ġ== Ġnull ) Ġthrow ĠIllegalArgumentException (" Race Ġconcept Ġis Ġnull ") ĊĠĠĠĠĠĠĠ Ġthis . context Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġthis . race Concept Ġ= Ġrace Concept ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! prefs . is Fl appy Game Intro duced ) Ġrun Game () ĊĠĠĠĠĠĠĠ Ġelse Ġshow Dialog () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Game () Ġ= Ġcontext . startActivity < Jump Game Activity >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstant . FL AP PY _ CH OS EN _ CATEGORY Ġto Ġrace Concept ) ĊĊĠĠĠ Ġprivate Ġfun Ġshow Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . alert Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġcontext . resources . getString ( R . string . settings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Button (" Ok ") Ġ{ Ġrun Game () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom View Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll View Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpadding Ġ= Ġdip ( 1 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdifficulty Block () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfps Block () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgap Block () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ@ An ko View Dsl Marker Ġ_ LinearLayout . gap Block () Ġ{ ĊĠĠĠĠĠĠĠ Ġheading ( context . getString ( R . string . gap _ size )) ĊĠĠĠĠĠĠĠ Ġcreate Radio Buttons ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg aps . map Ġ{ Ġit . name Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . fl appy Gap . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġindex , Ġbutton Ġ-> Ġbutton ?. setOnClickListener Ġ{ Ġprefs . fl appy Gap Ġ= Ġg aps [ index ] Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ@ An ko View Dsl Marker Ġ_ LinearLayout . fps Block () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġspeed Names Ġ= Ġmap Of ( 3 0 Ġto Ġ" P omal Ã¡ ", Ġ 3 5 Ġto Ġ" Norm Ã¡lnÃŃ ", Ġ 4 0 Ġto Ġ" R ych l Ã¡ ", Ġ 4 5 Ġto Ġ" Tur bo ") ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġfps : ĠTextView ĊĠĠĠĠĠĠĠ Ġlinear Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheading ( context . getString ( R . string . fl appy _ speed )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfps Ġ= Ġheading ("${ speed Names [ prefs . fl appy F ps ]} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Seek Bar ( fps , Ġmin Ġ= Ġ 3 0 , Ġmax Ġ= Ġ 4 5 , Ġstep Ġ= Ġ 5 , Ġspeed Names Ġ= Ġspeed Names ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ@ An ko View Dsl Marker Ġ_ LinearLayout . difficulty Block () Ġ{ ĊĠĠĠĠĠĠĠ Ġheading ( context . getString ( R . string . word _ difficulty )) ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdifficulty Names . to Mutable List () ĊĠĠĠĠĠĠĠ Ġlist . remove ( un available Difficulty (). name ) ĊĠĠĠĠĠĠĠ Ġcreate Radio Buttons ( list , Ġstored Difficulty (). name , Ġ{ Ġindex , Ġbutton Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton ?. setOnClickListener Ġ{ Ġprefs . fl appy Grade Name Ġ= Ġlist [ index ]. to Difficulty () Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ@ An ko View Dsl Marker Ġ_ LinearLayout . add Seek Bar ( fps : ĠTextView , Ġmin : ĠInt , Ġmax : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep : ĠInt , Ġspeed Names : ĠMap < Int , ĠString >) Ġ{ ĊĠĠĠĠĠĠĠ Ġseek Bar Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . max Ġ= Ġ( max Ġ- Ġmin ) Ġ/ Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġ( prefs . fl appy F ps Ġ- Ġmin ) Ġ/ Ġstep ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Seek Bar ChangeListener ( object Ġ: ĠSeek Bar . On Seek Bar ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar ?, Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Value Ġ= Ġprogress Ġ* Ġstep Ġ+ Ġmin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfps . text Ġ= Ġspeed Names [ current Value ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . fl appy F ps Ġ= Ġcurrent Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( seek Bar : ĠSeek Bar ?) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ@ An ko View Dsl Marker Ġ_ LinearLayout . create Radio Buttons ( list : ĠList < String >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Item : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction : Ġ( Int , ĠRadio Button ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhard ness RB Ġ= ĠarrayOf Null s < RadioButton >( list . size ) ĊĠĠĠĠĠĠĠ Ġradio Group Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Ġ= ĠLinearLayout . HORIZONTAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġtext ) Ġin Ġlist . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhard ness RB [ i ] Ġ= Ġradio Button () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġhard ness RB [ list . indexOf ( checked Item )] ?. isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhard ness RB . forEach Indexed ( function ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstored Difficulty (): ĠDiff iculty Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( prefs . fl appy Grade Name Ġ== Ġunavailable Difficulty ()) Ġprefs . fl appy Grade Name Ġ= ĠDiff iculty . Medium ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . fl appy Grade Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWe ird Ġbug Ġ- ĠString # equals Ġnot Ġworking Ġproperly Ġ? ! ĊĠĠĠĠ Ġ* ĠTemp Ġfix Ġwith Ġconstants ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġunavailable Difficulty () Ġ= Ġwhen Ġ( race Concept . name ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRace Concept . SPECIAL _ E Ġ-> ĠDiff iculty . Hard ĊĠĠĠĠĠĠĠ ĠRace Concept . DOUBLE D Ġ-> ĠDiff iculty . Hard ĊĠĠĠĠĠĠĠ ĠRace Concept . CASE S Ġ-> ĠDiff iculty . Easy ĊĠĠĠĠĠĠĠ ĠRace Concept . SHORT CUT S Ġ-> ĠDiff iculty . Easy ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠDiff iculty . Unknown ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ@ An ko View Dsl Marker Ġ_ LinearLayout . heading ( text : ĠCharSequence ): ĠTextView Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheading TextView ( text , Ġ 5 ) Ċ Ċ }