/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠPeter ĠRes pon dek Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 Ġcom . l any ard . p ir ate er lite . fragments Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Count Down Timer Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . GONE Ċ import Ġandroid . view . View . VISIBLE Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . l any ard . helpers . Grid LayoutManager Aut of it Ċ import Ġcom . l any ard . p ir ate er lite . R Ċ import Ġcom . l any ard . p ir ate er lite . controllers . Bo at Controller Ċ import Ġcom . l any ard . p ir ate er lite . models . Bo at Model Ċ import Ġcom . l any ard . p ir ate er lite . models . Job Model Ċ import Ġcom . l any ard . p ir ate er lite . models . Town Model Ċ import Ġcom . l any ard . p ir ate er lite . sing letons . Audio Ċ import Ġcom . l any ard . p ir ate er lite . sing letons . Game Ċ import Ġcom . l any ard . p ir ate er lite . sing letons . Map Ċ import Ġcom . l any ard . p ir ate er lite . sing letons . User Ċ import Ġcom . l any ard . p ir ate er lite . views . Cargo View Ċ import Ġcom . l any ard . p ir ate er lite . views . Job View Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ /** Ċ Ġ* ĠIf Ġa Ġbo at Ġis Ġselected Ġand Ġm oo red Ġat Ġa Ġtown Ġthis Ġfragment Ġhandles Ġloading Ġand Ġun loading Ġcargo Ġoff Ġa Ġbo at . Ċ Ġ* ĠIf Ġthe Ġbo at Ġis Ġs ailing Ġit Ġallows Ġthe Ġuser Ġto Ġsee Ġwhat Ġis Ġin Ġthe Ġbo ats Ġhold . Ċ Ġ* ĠIf Ġopened Ġfrom Ġthe ĠT own Info Fragment Ġit Ġshow Ġall Ġjobs Ġthe Ġtown Ġhas . Ċ Ġ* ĠThe Ġtop Ġpanel Ġis Ġthe Ġjob View Ġwhich Ġis Ġa Ġre cycler view Ġthat Ġutil ises Ġa ĠGrid LayoutManager Ċ Ġ* Ġand Ġhas ĠCard Views Ġfor Ġthe Ġjob Ġcells . ĠThe Ġbottom Ġpanel Ġis Ġa ĠCustom Ġview Ġwith Ġa Ċ Ġ* ĠGest ure Re cogn iser Ġso Ġthe Ġuser Ġcan Ġselect Ġa Ġcargo Ġslot Ġby Ġsw ip ing Ġthe ĠCard Views Ċ Ġ* Ċ Ġ* Ġ@ author ĠPeter ĠRes pon dek Ċ Ġ* Ċ Ġ* Ġ@ see ĠR . layout . fragment _ jobs Ċ Ġ* Ġ@ see ĠR . layout . cell _ job _ cell Ċ Ġ* Ġ@ see ĠJob View Ċ Ġ* Ġ@ see ĠGrid LayoutManager Aut of it Ċ Ġ* Ġ@ see ĠC argo View Ċ Ġ*/ Ċ Ċ class ĠJob Fragment Ġ: ĠFragment (), ĠGame . Game Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠJOB CELL _ HEADER Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval ĠJOB CELL _ JOB Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġval ĠJOB CELL _ STORAGE Ġ= Ġ 2 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ cargo View : ĠC argo View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ cargo : ĠArray < Job View > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ job View : ĠRecyclerView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ adapter : ĠJob Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ job TimeStamp : ĠDate ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ job Timer : ĠCount Down Timer ĊĊĊĠĠĠ Ġfun Ġget Remaining Job Time (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUser . job Interval Ġ- Ġ( Date (). time Ġ- Ġ_ job TimeStamp . time ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Timer () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this ::_ job Timer . isInitialized Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ job Timer . cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ job Timer Ġ= Ġobject Ġ: ĠCount Down Timer ( get Remaining Job Time (), Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Job Timer ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tick ( millis Until Finished : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Job Timer ( millis Until Finished ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ job Timer . start () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinner Ġclass ĠJob Adapter ( val Ġjobs : ĠArrayList < Job Model ?> ) Ġ: ĊĠĠĠĠĠĠĠ Ġandroidx . recyclerview . widget . RecyclerView . Adapter < Job Fragment . Job Adapter . Job ViewHolder >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Jobs ( jobs : ĠIterable < Job Model ?> ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . jobs . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( job Ġin Ġjobs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . jobs . add ( job ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠJob ViewHolder ( Ġval Ġview : ĠView Ġ) Ġ: Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder ( view ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjob view Ġ= Ġview . findViewById < Job View >( R . id . job View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( job view Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Touch ( job view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( p 0 : ĠJob ViewHolder , Ġp 1 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġjob : ĠJob Model ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġjob view : ĠJob View ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( getItem ViewType ( p 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJOB CELL _ HEADER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjob Label Ġ= Ġp 0 . view . findViewById < TextView >( R . id . job Label ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p 1 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Label . text Ġ= Ġresources . getText ( R . string . jobs _ jobs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Label . text Ġ= Ġresources . getText ( R . string . jobs _ storage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJOB CELL _ JOB Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġp 1 Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob view Ġ= Ġp 0 . view . findViewById < Job View >( R . id . job View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( idx Ġ< Ġjobs . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Ġ= Ġjobs [ idx ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob view . job Ġ= Ġjob ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJOB CELL _ STORAGE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob view Ġ= Ġp 0 . view . findViewById < Job View >( R . id . job View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġp 1 Ġ- Ġ 2 Ġ- Ġjobs . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( idx Ġ>= Ġ_ storage . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob view . job Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Ġ= Ġ_ storage [ idx ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob view . job Ġ= Ġjob ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Job B imp ( job , Ġjob view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġclear Job ( job : ĠJob Model ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġjobs . indexOf First Ġ{ Ġit Ġ=== Ġjob Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( idx Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjobs [ idx ] Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( idx Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Job ( job : ĠJob Model , Ġindex : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ>= Ġ 0 Ġ&& Ġindex Ġ< Ġjobs . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjobs [ index ] Ġ= Ġjob ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( v group : ĠViewGroup , Ġview Type : ĠInt ): ĠJob Fragment . Job Adapter . Job ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= ĠDisplay Metrics () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. window Manager ?. default Display ?. get Metrics ( metrics ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Type Ġ== ĠJOB CELL _ HEADER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Ġ= ĠLayoutInflater . from ( v group . context ). inflate ( R . layout . cell _ job _ header , Ġv group , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJob ViewHolder ( cell ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= ĠFrame Layout ( v group . context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Ġ= ĠLayoutInflater . from ( v group . context ). inflate ( R . layout . cell _ job _ cell , Ġframe , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe . layout Params Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams ( ViewGroup . LayoutParams . MATCH _ PARENT , Ġcell . layout Params . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFrame Layout . LayoutParams ( cell . layout Params . width , ĠViewGroup . LayoutParams . MATCH _ PARENT , ĠGr avity . CENTER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcard Ġ= Ġcell . findViewById < Job View >( R . id . job View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe . addView ( card ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJob ViewHolder ( frame ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== Ġ 0 Ġ|| Ġposition Ġ== Ġjobs . size Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJOB CELL _ HEADER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( position Ġ<= Ġjobs . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJOB CELL _ JOB ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJOB CELL _ STORAGE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( town Model Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġjobs . size Ġ+ Ġ 2 Ġ+ Ġtown Model !!. storage Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( boat Controller Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġjobs . size Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġjobs . size Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Job B imp ( job : ĠJob Model ?, Ġjob view : ĠJob View ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresources Ġ= Ġcontext ?. resources ĊĠĠĠĠĠĠĠ Ġif Ġ( resources Ġ!= Ġnull Ġ&& Ġjob Ġ!= Ġnull Ġ&& Ġjob view Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= ĠJob Model . job Data . first Ġ{ Ġit [ 0 ] Ġ== Ġjob . type Ġ} [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġresources . getIdentifier ( element , Ġ" drawable ", Ġcontext ?. packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob view . set Job Drawable ( resources . get Drawable ( res , Ġnull ), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ cargo Panel : ĠFrame Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ gold Label : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ silver Label : ĠTextView ĊĠĠĠ Ġprivate Ġvar Ġ_ jobs : ĠList < Job Model ?> ? ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ storage : ĠArrayList < Job Model ?> ĊĠĠĠ Ġprivate Ġvar Ġ_ size : ĠFloat ĊĊĠĠĠ Ġval Ġjobs : ĠList < Job Model ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ_ jobs !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġtown Model : ĠT own Model ? ĊĠĠĠ Ġvar Ġbo at Controller : ĠBo at Controller ? ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ size Ġ= Ġ 0 . 0 f ĊĠĠĠĠĠĠĠ Ġ_ jobs Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtown Model Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġbo at Controller Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġupdate Cargo Value () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( boat Controller Ġ== Ġnull ) Ġ{ Ġreturn Ġ} ĊĠĠĠĠĠĠĠ ĠGame . instance . boat Jobs Changed ( boat Controller !!. model ) ĊĠĠĠĠĠĠĠ Ġif Ġ(_ cargo Panel . visibility Ġ== ĠVIS IBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġ_ cargo View . cargo Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ gold Label . text Ġ= Ġvalue [ 0 ]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ silver Label . text Ġ= Ġvalue [ 1 ]. toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ job Timer . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Job Timer ( millis Until Finished : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġholder Ġ= Ġ_ job View . find ViewHolder For Layout Position ( 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlabel Ġ= Ġholder . item View . findViewById < TextView >( R . id . job Timer ) ĊĠĠĠĠĠĠĠ Ġif Ġ( town Model Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( millis Until Finished Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsecs Ġ= Ġmillis Until Finished Ġ/ Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmins Ġ= Ġsecs Ġ/ Ġ 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecs Ġ-= Ġmins Ġ* Ġ 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel . text Ġ= Ġresources . getString ( R . string . new Stock Timer , Ġmins , Ġsecs . toString (). pad Start ( 2 , Ġ' 0 ')) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel . text Ġ= Ġresources . getString ( R . string . new Stock ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġjob Deliver ed ( boat : ĠBo at Model , Ġtown : ĠT own Model , Ġgold : ĠInt , Ġsilver : ĠInt , Ġquiet : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( boat Ġ=== Ġbo at Controller ?. model ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ jobs Ġ= Ġbo at . cargo . toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ adapter . set Jobs (_ jobs !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ adapter . notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbo at Ar rived ( boat : ĠBo at Model , Ġtown : ĠT own Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( boat Ġ=== Ġbo at Controller ?. model ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Jobs () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbo at S ailed ( boat : ĠBo at Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( boat Ġ=== Ġbo at Controller ?. model ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Jobs () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreload Jobs () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtown Ġ= Ġtown Model ĊĠĠĠĠĠĠĠ Ġif Ġ( town Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( town . jobs Dirty Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ job TimeStamp Ġ= ĠUser . instance . job Date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ jobs Ġ= Ġtown . jobs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ adapter . set Jobs (_ jobs !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ adapter . notify Item Range Changed ( 1 , Ġ_ jobs !!. size ) ĊĠĠĠĠĠĠĠ Ġupdate Cargo Value () ĊĠĠĠĠĠĠĠ Ġreset Timer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Jobs () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbo at Ġ= Ġbo at Controller ĊĠĠĠĠĠĠĠ Ġval Ġtown Ġ= Ġtown Model ĊĠĠĠĠĠĠĠ Ġif Ġ( boat Ġ== Ġnull Ġ&& Ġtown Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ cargo Panel . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ jobs Ġ= Ġtown . jobs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ storage Ġ= Ġtown . storage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ adapter Ġ= ĠJob Adapter ( ArrayList (_ jobs )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( boat Ġ!= Ġnull Ġ&& Ġbo at . is S ailing Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtown Model Ġ= Ġbo at . model . town ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ jobs Ġ= Ġtown Model !!. jobs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ storage Ġ= Ġtown Model !!. storage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable _ jobs Ġ= ĠArrayList ( jobs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( town Bo at Ġin Ġtown Model !!. bo ats ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( job Ġin Ġtown Bo at . cargo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( job ?. source Ġ=== Ġtown Model ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġtable _ jobs . indexOf First Ġ{ Ġit Ġ=== Ġjob Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( idx Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable _ jobs [ idx ] Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ adapter Ġ= ĠJob Adapter ( table _ jobs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ cargo Ġ= Ġ_ cargo View . setup ( this . activity !! , Ġ_ size , Ġbo at Controller !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( cargo Ġin Ġbo at Controller !!. model . cargo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cargo Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjob view Ġ= Ġ_ cargo View . set Job ( cargo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Job B imp ( cargo , Ġjob view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ cargo View . cargo Listener Ġ= Ġobject Ġ: ĠC argo View . Cargo Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġjob Pressed ( view : ĠJob Model ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcargo Touch ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ cargo Panel . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Cargo Value () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( boat Ġ!= Ġnull Ġ&& Ġbo at . is S ailing Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtown Model Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Job Timer ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ cargo Panel . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ storage Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ jobs Ġ= Ġbo at Controller !!. model . cargo . toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ adapter Ġ= ĠJob Adapter ( ArrayList (_ jobs )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ adapter Ġ= ĠJob Adapter ( ArrayList ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ job View . adapter Ġ= Ġ_ adapter ĊĠĠĠĠĠĠĠ Ġreset Timer () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġcargo Touch ( job : ĠJob Model ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġidx Ġ= Ġ_ jobs !!. indexOf First Ġ{ Ġit Ġ=== Ġjob Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġclear Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġholder : ĠRecyclerView . ViewHolder ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( idx Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ adapter . add Job ( job , Ġidx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder Ġ= Ġ_ job View . find ViewHolder For Layout Position ( idx Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidx Ġ= Ġ_ storage . indexOf First Ġ{ Ġit Ġ== Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( idx Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ storage [ idx ] Ġ= Ġjob ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtown Model ?. storage ! ![ idx ] Ġ= Ġjob ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder Ġ= Ġ_ job View . find ViewHolder For Layout Position ( idx Ġ+ Ġ 2 Ġ+ Ġ_ jobs !!. size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjob view Ġ= Ġholder . item View . findViewById < Job View >( R . id . job View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob view . job Ġ= Ġjob ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Job B imp ( job , Ġjob view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠAudio . instance . queue Sound ( R . raw . button _ select ) ĊĠĠĠĠĠĠĠ Ġif Ġ( clear Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid n Ġ= Ġbo at Controller ?. model ?. cargo ?. indexOf First Ġ{ Ġit Ġ=== Ġjob Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id n Ġ!= Ġnull Ġ&& Ġid n Ġ> Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbo at Controller ?. model ?. cargo ?. set ( id n , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Cargo Value () ĊĠĠĠĠĠĠĠ Ġreturn Ġclear ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġjob Touch ( view : ĠJob View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( town Model Ġ== Ġnull Ġ|| Ġbo at Controller Ġ== Ġnull Ġ|| Ġview . job Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln (" Job ĠTouch ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( cargo Ġin Ġbo at Controller !!. model . cargo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( cargo . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( boat Controller !!. model . cargo . filter Ġ{ Ġit Ġ!= Ġnull Ġ}. size Ġ< Ġbo at Controller !!. model . cargo Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjob view Ġ= Ġ_ cargo View . add Job ( view . job !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Job B imp ( view . job , Ġjob view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ adapter . clear Job ( view . job !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAudio . instance . queue Sound ( R . raw . button _ select ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġ_ storage . indexOf First Ġ{ Ġview . job Ġ=== Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . job Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( idx Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtown Model ?. storage ! ![ idx ] Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ storage [ idx ] Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Cargo Value () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detach () ĊĠĠĠĠĠĠĠ ĠGame . instance . remove Game Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠĠĠ Ġactivity !!. window Manager . default Display . get Metrics ( metrics ) ĊĠĠĠĠĠĠĠ Ġval Ġview Manager Ġ= ĠGrid LayoutManager Aut of it ( container !!. context , Ġ( 1 2 0 Ġ* Ġmetrics . density ). toInt ()) ĊĠĠĠĠĠĠĠ Ġ// _ viewModel Ġ= ĠViewModel Providers . of ( this ). get ( Job ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġ_ job TimeStamp Ġ= ĠUser . instance . job Date ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( R . layout . fragment _ jobs , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ_ job View Ġ= Ġview . findViewById < android x . recyclerview . widget . RecyclerView >( R . id . job Table ) ĊĠĠĠĠĠĠĠ Ġ_ cargo View Ġ= Ġview . findViewById < Cargo View >( R . id . cargo View ) ĊĠĠĠĠĠĠĠ Ġ_ gold Label Ġ= Ġview . findViewById < TextView >( R . id . gold Label ) ĊĠĠĠĠĠĠĠ Ġ_ silver Label Ġ= Ġview . findViewById < TextView >( R . id . silver Label ) ĊĠĠĠĠĠĠĠ Ġ_ cargo Panel Ġ= Ġview . findViewById < Frame Layout >( R . id . cargo Panel ) ĊĠĠĠĠĠĠĠ Ġval Ġswipe Ġ= Ġview . findViewById < android x . swiper ef resh layout . widget . Swipe Refresh Layout >( R . id . job Refresh ) ĊĠĠĠĠĠĠĠ Ġswipe . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreload Jobs () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswipe . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview Manager . span Size Lookup Ġ= Ġobject Ġ: Ġandroidx . recyclerview . widget . Grid LayoutManager . Span Size Lookup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Span Size ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġview Manager . span Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ adapter . getItem ViewType ( position ) Ġ== ĠJOB CELL _ HEADER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġspan ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ job View . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= Ġview Manager ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ĠsavedInstanceState Ġ!= Ġnull Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbo at Id Ġ= ĠsavedInstanceState [" boat Controller "] Ġas ĠLong ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Ġbo at Id Ġ!= Ġnull Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġfragment Manager !!. find Fragment By Tag (" map ") Ġas ĠMap Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbo at Controller Ġ= Ġmap . boat Controller For Id ( boat Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtown Id Ġ= ĠsavedInstanceState [" town Model "] Ġas ĠLong ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Ġtown Id Ġ!= Ġnull Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtown Model Ġ= ĠMap . instance . town s . find Ġ{ Ġit . id Ġ== Ġtown Id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġupdate Jobs () ĊĠĠĠĠĠĠĠ Ġupdate Cargo Value () ĊĊĠĠĠĠĠĠĠ ĠGame . instance . add Game Listener ( this ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġval Ġbo at Ġ= Ġbo at Controller ĊĠĠĠĠĠĠĠ Ġif Ġ( boat Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout State . put Long (" boat Controller ", Ġbo at . model . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtown Ġ= Ġtown Model ĊĠĠĠĠĠĠĠ Ġif Ġ( town Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout State . put Long (" town Model ", Ġtown . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }