/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . example . android dev challenge . ui . details . weather Ċ Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Box With Constraints Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Padding Values Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . layout . Spacer Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . height Ċ import Ġandroidx . compose . foundation . layout . offset Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . foundation . layout . size Ċ import Ġandroidx . compose . foundation . layout . width Ċ import Ġandroidx . compose . material . Button Defaults . button Colors Ċ import Ġandroidx . compose . material . Local Content Color Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . alpha Ċ import Ġandroidx . compose . ui . graphics . Brush Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . graphics . graphics Layer Ċ import Ġandroidx . compose . ui . layout . Content Scale Ċ import Ġandroidx . compose . ui . layout . on Size Changed Ċ import Ġandroidx . compose . ui . platform . Local Density Ċ import Ġandroidx . compose . ui . text . style . Text Overflow Ċ import Ġandroidx . compose . ui . unit . Dp Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġcom . example . android dev challenge . R Ċ import Ġcom . example . android dev challenge . data . Local Padding Ċ import Ġcom . example . android dev challenge . data . Temperature Ċ import Ġcom . example . android dev challenge . ui . comp osable . Co il Image Ċ import Ġcom . example . android dev challenge . ui . comp osable . Flat Button Ċ import Ġcom . example . android dev challenge . ui . comp osable . Icon Ċ import Ġcom . example . android dev challenge . ui . comp osable . Image Ċ import Ġcom . example . android dev challenge . ui . comp osable . Number Text Ċ import Ġcom . example . android dev challenge . ui . comp osable . Rounded Tr ape z oid Ċ import Ġcom . example . android dev challenge . ui . theme . current Typography Ċ import Ġkotlin . math . absolute Value Ċ import Ġkotlin . math . round ToInt Ċ Ċ /** Ċ Ġ* ĠUsed Ġto Ġdisplay Ġimportant Ġinfo Ġabout Ġthe Ġweather . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ åĩ Ľ Ġ( https :// github . com / R in Or z ) Ċ Ġ*/ Ċ @ Composable Ċ fun ĠBoard ( ĊĠĠĠ Ġtemperature : ĠDouble , ĊĠĠĠ Ġtitle : ĠString , ĊĠĠĠ Ġsubtitle : ĠString , ĊĠĠĠ Ġtrailing Text : ĠString , ĊĠĠĠ Ġon Trailing Button Click : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġcolors : ĠList < Color >, ĊĠĠĠ Ġicon : ĠInt , Ċ ) Ġ= Ġwith ( Local Density . current ) Ġ{ ĊĠĠĠ Ġvar Ġboard Height Ġby Ġremember Ġ{ Ġmutable State Of ( Dp . H air line ) Ġ} ĊĠĠĠ Ġvar Ġtrailing Size Ġby Ġremember Ġ{ Ġmutable State Of ( Dp . H air line ) Ġ} ĊĠĠĠ Ġval Ġtransition Ġ= Ġremember Details Transition ( Local Weather Details State . current ) ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( horizontal Ġ= ĠLocal Padding . current . horizontal ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( top Ġ= ĠLocal Padding . current . vertical ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. offset ( y Ġ= Ġtransition . board . offset Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( transition . board . alpha ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. graphics Layer ( clip Ġ= Ġfalse ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBackground ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . height ( board Height ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolors ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠTr ailing Button ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Size Changed Ġ{ Ġtrailing Size Ġ= Ġit . width . to Dp () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. align ( Alignment . Top End ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 2 8 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrailing Text , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Trailing Button Click ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Size Changed Ġ{ Ġboard Height Ġ= Ġit . height . to Dp () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Ġ= ĠLocal Padding . current . horizontal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Ġ= ĠLocal Padding . current . vertical ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éģ¿åħį ä¸İ ĠA QI Ġ æĮīéĴ® éĩį åı ł ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġ 8 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 8 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġtrailing Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġsubtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 5 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverflow Ġ= ĠText Overflow . El lipsis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠLocal Content Color . current . copy ( 0 . 2 4 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġcurrent Typography . h 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 2 5 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverflow Ġ= ĠText Overflow . El lipsis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠLocal Content Color . current , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġcurrent Typography . h 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTemperature Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemperature , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġif Ġ( temperature Ġ< Ġ 0 ) ĠD p . H air line Ġelse Ġ 4 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 8 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠCo il Image ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. align ( Alignment . Bottom End ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( top Ġ= Ġ 8 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( 2 3 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. offset ( 2 4 . dp ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠTr ailing Button ( ĊĠĠĠ Ġmodifier : ĠModifier , ĊĠĠĠ Ġtrailing Text : ĠString , ĊĠĠĠ Ġon Trailing Button Click : Ġ() Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ Ġval Ġcolor Ġ= ĠLocal Content Color . current ĊĠĠĠ ĠFlat Button ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier , ĊĠĠĠĠĠĠĠ ĠonClick Ġ= Ġon Trailing Button Click , ĊĠĠĠĠĠĠĠ Ġcolors Ġ= Ġbutton Colors ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= Ġcolor . copy ( 0 . 0 8 f ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġcontent Padding Ġ= ĠPadding Values ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Ġ= Ġ 1 6 . dp , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Ġ= Ġ 1 2 . dp ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠIcon ( id Ġ= ĠR . drawable . ic _ a qi , Ġmodifier Ġ= ĠModifier . size ( 2 0 . dp )) ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . width ( 8 . dp )) ĊĠĠĠĠĠĠĠ ĠNumber Text ( text Ġ= Ġtrailing Text ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠTemperature Text ( temperature : ĠDouble , Ġmodifier : ĠModifier Ġ= ĠModifier ) Ġ{ ĊĠĠĠ Ġval Ġnumber Text Ġ= Ġtemperature . round ToInt (). absolute Value . toString () ĊĊĠĠĠ ĠRow ( modifier , Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ è´Ł æķ° ĊĠĠĠĠĠĠĠ Ġif Ġ( temperature Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠR . drawable . ic _ temp _ negative , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . width ( 3 6 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalpha Ġ= Ġ 0 . 6 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnumber Text . forEach Ġ{ Ġchar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTemperature . getNumber Icon ( char )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . height ( 1 1 6 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Scale Ġ= ĠContent Scale . Fill Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠR . drawable . ic _ temp _ unit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( 2 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. offset ( y Ġ= Ġ(- 2 6 ). dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalpha Ġ= Ġ 0 . 6 f ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠBackground ( ĊĠĠĠ Ġmodifier : ĠModifier , ĊĠĠĠ Ġcolors : ĠList < Color > Ċ ) Ġ{ ĊĠĠĠ ĠBox With Constraints ( modifier Ġ= Ġmodifier . fill Max Width ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠRo unded Tr ape z oid ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġangle Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcorner Radius Ġ= ĠmaxWidth Ġ* Ġ 0 . 1 6 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrush Ġ= ĠBr ush . vertical Gradient ( colors ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( max Height ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ