/* Ċ Ġ* Ġ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 Ċ Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . Activity Info . SCREEN _ OR IENTATION _ POR TRA IT Ċ import Ġandroid . content . pm . Activity Info . SCREEN _ OR IENTATION _ UNSPECIFIED Ċ import Ġandroid . content . res . Configuration .* Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġcom . l any ard . canvas . Bitmap Stream Ċ 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 . 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 . view models . Splash Activity ViewModel Ċ Ċ /** Ċ Ġ* ĠThrows Ġup Ġthe Ġsplash Ġscreen Ġwhen Ġthe Ġapp Ġis Ġlaunched Ġand Ġf etches Ġall Ġthe Ċ Ġ* Ġnecessary Ġdata Ġto Ġconstruct Ġthe ĠUI Ġincluding Ġdatabase Ġqueries Ġetc . Ċ Ġ* Ċ Ġ* Ġ@ author ĠPeter ĠRes pon dek Ċ Ġ*/ Ċ Ċ class ĠSpl ash Activity Ġ: ĠFragment Activity () Ġ{ ĊĠĠĠ Ġvar Ġmap Config Ġ: ĠHashMap < String , ĠAny >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ viewModel : ĠSpl ash Activity ViewModel ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMake Ġinitial Ġsetup Ġand Ġcall Ġto Ġour ĠRoom Ġdatabase . ĠN atur ally Ġthe Ġview model Ġholds Ġpersistent ĠL ived ata ĊĠĠĠĠ Ġ* Ġwhich Ġthis Ġactivity Ġworks Ġwith . ĠIf Ġthe Ġactivity Ġis Ġtr ashed Ġduplicate Ġcalls Ġw ont Ġbe Ġmade . ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġlock Ġour Ġview Ġto Ġpor trait Ġit Ġthe Ġscreen Ġdoes Ġnot Ġsupport Ġit . ĊĠĠĠĠĠĠĠ Ġif Ġ( resources . getBoolean ( R . bool . portrait _ only )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Orientation Ġ= ĠSCREEN _ OR IENTATION _ POR TRA IT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġactivity Ġis Ġstarted Ġvia Ġa Ġnotification Ġthe Ġapp Ġmay Ġalready Ġbe Ġstarted . ĊĠĠĠĠĠĠĠ Ġif Ġ( Map . isInitialized Ġ&& ĠUser . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Map Activity () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate Notification Channel () ĊĠĠĠĠĠĠĠ Ġmap Config Ġ= ĠMap . load Config ( this ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreen Size Ġ= Ġresources . configuration . screen Layout Ġand ĠSCREEN LAYOUT _ SIZE _ MASK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( screen Size Ġ== ĠSCREEN LAYOUT _ SIZE _ LARGE Ġ|| Ġscreen Size Ġ== ĠSCREEN LAYOUT _ SIZE _ XL ARGE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwidth Ġ> Ġheight , Ġbetter Ġto Ġuse ĠLand scape ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Orientation Ġ= ĠSCREEN _ OR IENTATION _ UNSPECIFIED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Orientation Ġ= ĠSCREEN _ OR IENTATION _ POR TRA IT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . default Display . get Metrics ( metrics ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Stream . density Ġ= Ġmetrics . density ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Stream . density D pi Ġ= Ġmetrics . density D pi ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBo at Model . initialize ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGame . initialize ( application Context , Ġmap Config !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAudio . initialize ( application Context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ viewModel Ġ= ĠViewModel Providers . of ( this ). get ( Splash Activity ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġ_ viewModel . db Ready . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Down Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ-= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Primary Data Fetch () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= ĠObserver < Any > Ġ{ Ġcount Down () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ viewModel . userdata ?. observe ( this , Ġobserver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ viewModel . stat data ?. observe ( this , Ġobserver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ viewModel . boat Data ?. observe ( this , Ġobserver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ viewModel . town Data ?. observe ( this , Ġobserver ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġthe ĠNotification Channel , Ġbut Ġonly Ġon ĠAPI Ġ 2 6 + Ġbecause ĊĠĠĠĠ Ġ* Ġthe ĠNotification Channel Ġclass Ġis Ġnew Ġand Ġnot Ġin Ġthe Ġsupport Ġlibrary . ĊĠĠĠĠ Ġ* ĠThis Ġallows Ġthe Ġuser Ġto Ġturn Ġoff Ġspecific Ġnotifications . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Notification Channel () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠgetString ( R . string . boat Ar rive Channel Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Text Ġ= ĠgetString ( R . string . boat Ar rive Channel Desc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimportance Ġ= ĠNotification Manager . IMPORT ANCE _ DEFAULT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠNotification Channel ( getString ( R . string . channelId ), Ġname , Ġimportance ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġdescription Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRegister Ġthe Ġchannel Ġwith Ġthe Ġsystem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Manager : ĠNotification Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget System Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . create Notification Channel ( channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOnce Ġwe Ġhave Ġour Ġinitial Ġdata Ġand Ġpre pop ulated Ġthe Ġdatabase Ġit Ġif Ġneeded , Ġwe Ġcan Ġmake Ġqueries ĊĠĠĠĠ Ġ* Ġabout Ġtown Ġand Ġbo at Ġjobs / cargo / storage Ġand Ġstart Ġuser Ġand Ġgame Ġsing letons . ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġprivate Ġfun Ġon Primary Data Fetch () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠĠĠ Ġwindow Manager . default Display . get Metrics ( metrics ) ĊĠĠĠĠĠĠĠ ĠMap . initialize ( map Config !! ,_ viewModel . town Data ?. value !! , Ġmetrics . density ) ĊĠĠĠĠĠĠĠ ĠUser . initialize ( application Context ,_ viewModel . userdata ?. value ! ![ 0 ], Ġ_ viewModel . stat data ?. value !! , Ġ_ viewModel . boat Data ?. value !! ) ĊĠĠĠĠĠĠĠ ĠUser . instance . add Lister ner ( Game . instance ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġval Ġcount Down Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ-= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Map Activity () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbo at Ids Ġ= Ġmutable ListOf < Long >() ĊĠĠĠĠĠĠĠ ĠUser . instance . bo ats . map To ( boat Ids ,{ Ġit . id Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġtown Ids Ġ= Ġmutable ListOf < Long >() ĊĠĠĠĠĠĠĠ ĠMap . instance . town s . map To ( town Ids ,{ Ġit . id Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ_ viewModel . fetch Bo at Jobs ( boat Ids ). observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( boat Ġin ĠUser . instance . bo ats ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbo at Jobs Ġ= Ġit . filter Ġ{ Ġbo at . id Ġ== Ġit . boat id Ġ}. map Ġ{ ĠJob Model ( it . job Data ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbo at . set Cargo ( boat Jobs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ_ viewModel . fetch Town Jobs ( town Ids ). observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( town Ġin ĠMap . instance . town s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtown Jobs Ġ= Ġit . filter Ġ{ Ġtown . id Ġ== Ġit . town id Ġ}. map Ġ{ ĠJob Model ( it . job Data ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtown . set Jobs ( town Jobs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ_ viewModel . fetch Storage Jobs ( town Ids ). observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( town Ġin ĠMap . instance . town s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtown Jobs Ġ= Ġit . filter Ġ{ Ġtown . id Ġ== Ġit . town id Ġ}. map Ġ{ ĠJob Model ( it . job Data ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtown . set Storage ( town Jobs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStart Ġthe Ġmap Ġactivity . ĠIf Ġwe Ġstarted Ġthe Ġactivity Ġvia Ġa Ġlocal Ġnotification Ġthe Ġintent ĊĠĠĠĠ Ġ* Ġcontains Ġdata Ġwe Ġneed Ġto Ġfocus Ġthe Ġmap Ġon Ġthe Ġselected Ġbo at . ĠWe Ġpass Ġthat Ġdata Ġthrough Ġto Ġthe Ġmap Ġintent . ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġprivate Ġfun Ġstart Map Activity () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbo at id Ġ= Ġintent . getLong Extra (" boat id ", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( application Context , ĠMap Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" boat id ", Ġbo at id ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġoverride Pending Transition ( android . R . anim . slide _ in _ left , Ġandroid . R . anim . slide _ out _ right ) ĊĠĠĠ Ġ} Ċ Ċ }