package Ġcom . b aw p . jet weather app . screens . screens . main Ċ Ċ import Ġandroidx . compose . animation . Experimental Animation Api Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . lazy . Lazy Column Ċ import Ġandroidx . compose . foundation . lazy . items Ċ import Ġandroidx . compose . foundation . shape . Circle Shape Ċ import Ġandroidx . compose . foundation . shape . Rounded Corner Shape Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . text . font . FontStyle Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . h ilt . navigation . compose . h ilt ViewModel Ċ import Ġandroidx . navigation . Nav Host Controller Ċ import Ġco il . annotation . Experimental Co il Api Ċ import Ġcom . b aw p . jet weather app . components . Weather AppBar Ċ import Ġcom . b aw p . jet weather app . data . Data Or Exception Ċ import Ġcom . b aw p . jet weather app . model . Weather Item Ċ import Ġcom . b aw p . jet weather app . model . Weather Object Ċ import Ġcom . b aw p . jet weather app . navigation . Weather Scre ens Ċ import Ġcom . b aw p . jet weather app . screens . screens . search . Search ViewModel Ċ import Ġcom . b aw p . jet weather app . screens . screens . settings . Settings ViewModel Ċ import Ġcom . b aw p . jet weather app . utils . format Date Ċ import Ġcom . b aw p . jet weather app . utils . format Decimal s Ċ import Ġcom . b aw p . jet weather app . widgets . Hum idity Wind Pressure Row Ċ import Ġcom . b aw p . jet weather app . widgets . S unset Sun R ise Row Ċ import Ġcom . b aw p . jet weather app . widgets . Weather Detail Row Ċ import Ġcom . b aw p . jet weather app . widgets . Weather State Image Ċ Ċ @ Experimental Co il Api Ċ @ Experimental Animation Api Ċ @ Composable Ċ fun ĠMain Screen ( ĊĠĠĠ ĠviewModel : ĠSearch ViewModel Ġ= Ġh ilt ViewModel (), ĊĠĠĠ Ġsettings ViewModel : ĠSettings ViewModel Ġ= Ġh ilt ViewModel (), ĊĠĠĠ Ġnav Controller : ĠNav Host Controller , ĊĠĠĠ Ġcity : ĠString ) Ġ{ ĊĊĠĠĠ Ġval Ġcur City : ĠString Ġ= Ġif Ġ( city . isBlank ()) Ġ" S pok ane " Ġelse Ġcity ĊĠĠĠ Ġval Ġunit From DB Ġ= Ġsettings ViewModel . unit List . collect As State (). value ĊĠĠĠ Ġvar Ġunit Ġby Ġremember Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable State Of (" imp erial ") Ġ// default Ġvalue ĊĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġis Imp erial Ġby Ġremember Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable State Of ( false ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ(! unit From DB . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠ Ġ// ĠLog . d (" TAG F ", Ġ" Main Screen : Ġ${ unit From DB [ 0 ]. unit . split (" Ġ" )[ 0 ]. lowercase () }") ĊĠĠĠĠĠĠĠ Ġunit Ġ= Ġunit From DB [ 0 ]. unit . split (" Ġ" )[ 0 ]. lowercase () ĊĠĠĠĠĠĠĠ Ġis Imp erial Ġ= Ġunit Ġ== Ġ" imp erial " ĊĊĠĠĠĠĠĠĠ Ġval Ġweather Data Ġ= Ġproduce State < Data Or Exception < Weather Object , ĠBoolean , ĠException >>( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value Ġ= ĠData Or Exception ( loading Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠviewModel . get Weather Data ( city Ġ= Ġcur City , Ġunits Ġ= Ġunit ) ĊĠĠĠĠĠĠĠ Ġ}. value ĊĊĠĠĠĠĠĠĠ Ġif Ġ( weather Data . loading Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCircular Progress Indicator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . Dark Gray ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( weather Data . data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMain Sca ffold ( weather Object Ġ= Ġweather Data . data !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller Ġ= Ġnav Controller , Ġis Imp erial Ġ= Ġis Imp erial ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊ Ċ } Ċ Ċ @ Experimental Co il Api Ċ @ Experimental Animation Api Ċ @ Composable Ċ fun ĠMain Sca ffold ( ĊĠĠĠ Ġweather Object : ĠWeather Object , ĊĠĠĠ Ġnav Controller : ĠNav Host Controller , ĊĠĠĠ Ġis Imp erial : ĠBoolean , Ġ) Ġ{ ĊĊĠĠĠ ĠScaffold ( top Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠ ĠWeather AppBar ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġweather Object . city . name Ġ+ Ġ", Ġ${ weather Object . city . country }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller Ġ= Ġnav Controller , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Add Action Clicked Ġ= Ġ{ Ġnav Controller . navigate ( Weather Scre ens . Search Screen . name ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelevation Ġ= Ġ 5 . dp ) ĊĊĠĠĠ Ġ}, Ġbottom Bar Ġ= Ġ{}, ĠbackgroundColor Ġ= ĠColor . Light Gray . copy ( alpha Ġ= Ġ 0 . 0 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMain Content ( data Ġ= Ġweather Object , Ġis Imp erial Ġ= Ġis Imp erial ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Co il Api Ċ @ Experimental Animation Api Ċ @ Composable Ċ private Ġfun ĠMain Content ( data : ĠWeather Object ?, Ġis Imp erial : ĠBoolean ) Ġ{ ĊĠĠĠ Ġval ĠimageUrl Ġ= Ġ" https :// open weather map . org / img / wn /${ data !!. list [ 0 ]. weather [ 0 ]. icon }. png " ĊĠĠĠ Ġvar Ġunit Toggle State Ġby Ġremember Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable State Of ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 4 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width (), ĊĠĠĠĠĠĠĠ Ġvertical Arrange ment Ġ= ĠArrange ment . Center , ĊĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally , ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠRow ( modifier Ġ= ĠModifier . fill Max Width (), ĊĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Space Even ly , ĊĠĠĠĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġformat Date ( data . list [ 0 ]. dt ), Ġ// " Today ĠNov Ġ 2 9 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . caption , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠMaterial Theme . colors . on Secondary , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Sem iB old , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ToggleButton ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Ġ= Ġ! unit Toggle State , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Checked Change Ġ= Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Toggle State Ġ= Ġ! it Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" TAG ", Ġ" Main Content : Ġ$ unit Toggle State ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġif Ġ( unit Toggle State ) Ġ" F " Ġelse Ġ" C ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSurface ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 4 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 2 0 0 . dp ), Ġshape Ġ= ĠCircle Shape ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Color ( 0 xFFFF C 4 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( horizontal Ġ= Ġ 1 6 . dp , Ġvertical Ġ= Ġ 3 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Arrange ment Ġ= ĠArrange ment . Center , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather State Image ( im ager Url Ġ= ĠimageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġformat Decimal s ( data . list [ 0 ]. temp . day ) Ġ+ Ġ" Âº ", // Press Ġand Ġhold Ġthe ĠALT Ġkey Ġand Ġtype Ġ 0 1 7 6 Ġwith ĠNum Lock Ġon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 4 , ĠfontWeight Ġ= ĠFontWeight . Extra Bold ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġdata . list [ 0 ]. weather [ 0 ]. main , Ġfont Style Ġ= ĠFont Style . Italic ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠHum idity Wind Pressure Row ( weather Ġ= Ġdata . list [ 0 ], Ġis Imp erial Ġ= Ġis Imp erial ) ĊĠĠĠĠĠĠĠ ĠDiv ider () ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 1 5 . dp )) ĊĠĠĠĠĠĠĠ ĠS unset Sun R ise Row ( weather Ġ= Ġdata . list [ 0 ]) ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 1 5 . dp )) ĊĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" This ĠWeek ", Ġstyle Ġ= ĠMaterial Theme . typography . subtitle 1 , ĠfontWeight Ġ= ĠFontWeight . Bold ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠSurface ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Height (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( 0 xFF EE F 1 EF ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape Ġ= ĠRo unded Corner Shape ( size Ġ= Ġ 1 4 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Column ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 2 . dp ), Ġcontent Padding Ġ= ĠPadding Values ( 1 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems ( items Ġ= Ġdata . list ) Ġ{ Ġitem : ĠWeather Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Detail Row ( weather Ġ= Ġitem ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊĊ