package Ġinfo . moe vm . se . weather ad visor . main screen Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġinfo . moe vm . se . data . repositories . Acc u Weather Repository Ċ import Ġinfo . moe vm . se . data . repositories . Item Repository Ċ import Ġinfo . moe vm . se . domain . entities . Item Types Ċ import Ġinfo . moe vm . se . weather ad visor . App Ċ import Ġinfo . moe vm . se . weather ad visor . R Ċ import Ġinfo . moe vm . se . weather ad visor . location screen . Location Activity Ċ import Ġinfo . moe vm . se . weather ad visor . location screen . Location Activity . Companion . LOCATION _ CODE _ EXTRA Ċ import Ġinfo . moe vm . se . weather ad visor . location screen . Location Activity . Companion . LOCATION _ NAME _ EXTRA Ċ import Ġinfo . moe vm . se . weather ad visor . ward ro bes creen . W ard ro be Activity Ċ import Ġkotlinx . android . synt hetic . main . activity _ main _ screen . man ik in Ċ import Ġkotlinx . android . synt hetic . main . activity _ main _ screen . swipe _ to _ refresh Ċ import Ġkotlinx . android . synt hetic . main . activity _ main _ screen . weather _ date Ċ import Ġkotlinx . android . synt hetic . main . activity _ main _ screen . weather _ state Ċ import Ġkotlinx . android . synt hetic . main . activity _ main _ screen . weather _ temp Ċ import Ġkotlinx . android . synt hetic . main . activity _ main _ screen . weather _ wet Ċ import Ġkotlinx . android . synt hetic . main . activity _ main _ screen . weather _ wind Ċ import Ġkotlinx . android . synt hetic . main . toolbar . toolbar _ nav _ button Ċ import Ġkotlinx . android . synt hetic . main . toolbar . toolbar _ title Ċ import Ġkotlinx . android . synt hetic . main . toolbar . toolbar _ view Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠMain Screen Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġrepository : ĠAcc u Weather Repository ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġitems Repository : ĠItem Repository ĊĊĠĠĠ Ġvar Ġcurrent Code Ġ= ĠDEFAULT _ LOCATION _ CODE ĊĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġfun Ġupdate Data ( code : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . load Weather For City ( code ). subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather _ date . text Ġ= ĠSimpleDateFormat (" dd . MM . yyyy ", ĠLocale . getDefault ()). format ( it . date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather _ temp . text Ġ= ĠString . format ("% s \ u 0 0 B 0 C ", Ġit . temp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather _ wind . text Ġ= ĠString . format ("% s Ġ% s Ġ% s ", ĠgetString ( R . string . weather _ wind ), Ġit . wind , ĠgetString ( R . string . ms )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather _ wet . text Ġ= ĠString . format ("% s Ġ% s Ġ% s ", ĠgetString ( R . string . weather _ pressure ), Ġit . wet , ĠgetString ( R . string . mm )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather _ state . text Ġ= Ġit . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput On Man ik in () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe _ to _ refresh . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe _ to _ refresh . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ( application Ġas ĠApp ). app Component . inject ( this ) ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main _ screen ) ĊĠĠĠĠĠĠĠ Ġtoolbar _ title . text Ġ= ĠgetString ( R . string . default _ city ) ĊĠĠĠĠĠĠĠ Ġtoolbar _ nav _ button . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Resource ( R . drawable . vd _ location ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this @ Main Screen Activity , ĠLocation Activity :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOC ATION _ REQUEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Data ( current Code ) ĊĠĠĠĠĠĠĠ Ġset ActionBar ( toolbar _ view ) ĊĠĠĠĠĠĠĠ Ġswipe _ to _ refresh . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Data ( current Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġman ik in . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġweather _ temp . text . toString (). substring ( 0 , Ġweather _ temp . text . length Ġ- Ġ 2 ). toFloat (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Head Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠW ard ro be Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( WARD RO BE _ FILTER _ EXTRA , ĠItem Types . HEAD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( WARD RO BE _ TEMP _ EXTRA , Ġtemp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Over body Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠW ard ro be Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( WARD RO BE _ FILTER _ EXTRA , ĠItem Types . OVER BODY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( WARD RO BE _ TEMP _ EXTRA , Ġtemp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Body Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠW ard ro be Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( WARD RO BE _ FILTER _ EXTRA , ĠItem Types . BODY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( WARD RO BE _ TEMP _ EXTRA , Ġtemp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Le gs Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠW ard ro be Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( WARD RO BE _ FILTER _ EXTRA , ĠItem Types . LE GS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( WARD RO BE _ TEMP _ EXTRA , Ġtemp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Fe et Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠW ard ro be Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( WARD RO BE _ FILTER _ EXTRA , ĠItem Types . FE ET ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( WARD RO BE _ TEMP _ EXTRA , Ġtemp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġput On Man ik in () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . main _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( item Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ward ro be Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠW ard ro be Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOC ATION _ REQUEST Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġdata . getInt Extra ( LOCATION _ CODE _ EXTRA , Ġ 2 9 5 2 1 2 ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . getString Extra ( LOCATION _ NAME _ EXTRA ). let Ġ{ Ġif Ġ( it . isNotBlank ()) Ġit Ġelse Ġ" S aint - Pet ers burg " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar _ title . text Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Code Ġ= Ġcode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Data ( code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Check Result ") ĊĠĠĠ Ġprivate Ġfun Ġput On Man ik in () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġweather _ temp . text . toString (). substring ( 0 , Ġweather _ temp . text . length Ġ- Ġ 2 ). toFloat (). toInt () ĊĠĠĠĠĠĠĠ Ġman ik in . clear Items () ĊĠĠĠĠĠĠĠ Ġitems Repository . load All (). subscribe Ġ{ Ġitems Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Ġ== ĠItem Types . HEAD Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . temp From Ġ<= Ġtemp Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . temp To Ġ>= Ġtemp Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . selected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Collection ( man ik in . head Items ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Ġ== ĠItem Types . OVER BODY Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . temp From Ġ<= Ġtemp Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . temp To Ġ>= Ġtemp Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . selected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Collection ( man ik in . over body Items ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Ġ== ĠItem Types . BODY Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . temp From Ġ<= Ġtemp Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . temp To Ġ>= Ġtemp Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . selected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Collection ( man ik in . body Items ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Ġ== ĠItem Types . LE GS Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . temp From Ġ<= Ġtemp Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . temp To Ġ>= Ġtemp Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . selected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Collection ( man ik in . leg s Items ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Ġ== ĠItem Types . FE ET Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . temp From Ġ<= Ġtemp Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . temp To Ġ>= Ġtemp Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . selected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Collection ( man ik in . fe et Items ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġman ik in . d ress () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠWAR D RO BE _ FILTER _ EXTRA Ġ= Ġ" WARD RO BE _ FILTER _ EXTRA " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠWAR D RO BE _ TEMP _ EXTRA Ġ= Ġ" WARD RO BE _ TEMP _ EXTRA " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLOC ATION _ REQUEST Ġ= Ġ 0 x 0 0 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ LOCATION _ CODE Ġ= Ġ" 2 9 5 2 1 2 " ĊĠĠĠ Ġ} Ċ } Ċ