package Ġcom . spe ter 9 7 . weather forecast . ui . forecast Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . spe ter 9 7 . weather forecast . R Ċ import Ġcom . spe ter 9 7 . weather forecast . data . db . data . Future Weather Item Ċ import Ġcom . spe ter 9 7 . weather forecast . coroutine Helpers . Scoped Fragment Ċ import Ġkotlinx . android . synt hetic . main . fragment _ forecast .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . kode in . di . K ode in Aware Ċ import Ġorg . kode in . di . android . x . closest K ode in Ċ import Ġorg . kode in . di . generic . instance Ċ Ċ class ĠFore cast Fragment Ġ: ĠScoped Fragment (), ĠK ode in Aware Ġ{ ĊĊĠĠĠ Ġ// ĠDefault Ġstart ĊĠĠĠ Ġoverride Ġval Ġk ode in Ġby Ġclosest K ode in () ĊĠĠĠ Ġprivate Ġval ĠviewModel Factory : ĠFore cast Weather ViewModel Factory Ġby Ġinstance () ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠFore cast ViewModel ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ forecast , container , false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this , ĠviewModel Factory ). get ( Forecast ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġbind UI () ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠDefault Ġend ĊĊĠĠĠ Ġ// Main Dispatcher : Ġonly Ġchange Ġthe Ġmain ĠUI Ġwhen Ġon Ġthe ĠMain Ġthread ĊĠĠĠ Ġprivate Ġfun Ġbind UI () Ġ= Ġlaunch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġweather Items Ġ= ĠviewModel . weather Items . await () ĊĊĠĠĠĠĠĠĠ Ġweather Items . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġweather Entries Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( weather Entries Ġ== Ġnull Ġ|| Ġweather Entries . isEmpty ()) Ġreturn @ Observer ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĠLinearLayoutManager ( activity , ĠLinearLayoutManager . HORIZONTAL , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView Parent . layout Manager Ġ= Ġmanager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView Parent . set Has Fixed Size ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweather 5 Days List Ġ= Ġtransform 3 Hours List To 5 Days List ( weather Entries . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Max Temperature s Ġ= Ġget MinMax Temperature ( weather 5 Days List . toList ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay Metrics : ĠDisplay Metrics Ġ= Ġcontext !!. resources . display Metrics ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdp Height Ġ= Ġdisplay Metrics . height Pixels Ġ/ Ġdisplay Metrics . density ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Adapter Ġ= ĠMy Adapter ( weather 5 Days List . to Mutable List (), Ġmin Max Temperature s [ 0 ], Ġmin Max Temperature s [ 1 ], Ġdp Height * 1 . 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView Parent . adapter Ġ= Ġmy Adapter ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġtransform 3 Hours List To 5 Days List ( weather Entries List : ĠList < Future Weather Item >) Ġ: ĠList < Future Weather Item >{ ĊĠĠĠ Ġvar Ġto Return : ĠList < Future Weather Item > Ġ= Ġempty List () ĊĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġbest Before Id Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġbest Before Min Ġ= Ġweather Entries List [ 0 ]. main . temp Min ĊĠĠĠ Ġvar Ġbest Before Wind Ġ= Ġweather Entries List [ 0 ]. wind . speed ĊĠĠĠ Ġweather Entries List . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( weather Entries List [ best Before Id ]. main . temp Max Ġ< Ġit . main . temp Max ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbest Before Id Ġ= Ġi ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( best Before Min Ġ> Ġit . main . temp Min ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbest Before Min Ġ= Ġit . main . temp Max ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( best Before Wind Ġ< Ġit . wind . speed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbest Before Wind Ġ= Ġit . wind . speed ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( i Ġ% Ġ 8 Ġ== Ġ 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Entries List [ best Before Id ]. main . temp Min Ġ= Ġbest Before Min ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Entries List [ best Before Id ]. wind . speed Ġ= Ġbest Before Wind ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Return Ġ+= Ġweather Entries List [ best Before Id ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbest Before Min Ġ= Ġ 1 0 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbest Before Wind Ġ= Ġ- 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbest Before Id Ġ= Ġi + 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġto Return Ċ } Ċ Ċ fun Ġget MinMax Temperature ( weather Entries List : ĠList < Future Weather Item >) Ġ: ĠArray < Double > Ġ{ ĊĠĠĠ Ġvar Ġmin Ġ= Ġ+ 1 0 0 . 0 ĊĠĠĠ Ġvar Ġmax Ġ= Ġ- 1 0 0 . 0 ĊĠĠĠ Ġweather Entries List . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( it . main . temp Max Ġ> Ġmax ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Ġ= Ġit . main . temp Max ĊĠĠĠĠĠĠĠ Ġif ( it . main . temp Min Ġ< Ġmin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Ġ= Ġit . main . temp Min ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠarrayOf ( min , Ġmax ) Ċ } Ċ Ċ // ĠViewModel Providers Ġdeprecated Ġhttps :// stackoverflow . com / questions / 5 3 9 0 3 7 6 2 / view model providers - is - deprecated - in - 1 - 1 - 0