// ĠCopyright Ġ 2 0 2 0 Ġ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 Ċ // Ċ // ĠĠĠĠĠ Ġhttp :// 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 . reddit . components Ċ Ċ import Ġandroidx . compose . animation .* Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . foundation . layout . size Ċ import Ġandroidx . compose . foundation . selection . toggle able Ċ import Ġandroidx . compose . foundation . shape . Rounded Corner Shape Ċ import Ġandroidx . compose . material . Card Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Mutable State Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . paint Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . graphics . Color Filter Ċ import Ġandroidx . compose . ui . graphics . composite Over Ċ import Ġandroidx . compose . ui . graphics . vector . Image Vector Ċ import Ġandroidx . compose . ui . graphics . vector . remember Vector Painter Ċ import Ġandroidx . compose . ui . res . vector Resource Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . example . reddit . R Ċ import Ġcom . example . reddit . fa ded On Primary Ċ import Ġcom . example . reddit . fa ded Primary Ċ import Ġkotlin . math . max Ċ Ċ enum Ġclass ĠV ote Status Ġ{ ĊĠĠĠ ĠUP , ĊĠĠĠ ĠDOWN , ĊĠĠĠ ĠUN V OT ED , Ċ } Ċ Ċ fun ĠInt . adjust Score ( vote Status : ĠV ote Status ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġscore Ġ= Ġthis ĊĠĠĠ Ġreturn Ġwhen Ġ( vote Status ) Ġ{ ĊĠĠĠĠĠĠĠ ĠV ote Status . UN V OT ED Ġ-> Ġscore ĊĠĠĠĠĠĠĠ ĠV ote Status . UP Ġ-> Ġscore Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ ĠV ote Status . DOWN Ġ-> Ġmax ( score Ġ- Ġ 1 , Ġ 0 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠPost ( vote Status : ĠMutable State < Vote Status >, Ġchildren : Ġ@ Composable Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġup vote Color Ġ= ĠColor ( 0 xFFFF 8 B 6 0 ) ĊĠĠĠ Ġval Ġdown vote Color Ġ= ĠColor ( 0 xFF 9 4 9 4 FF ) ĊĠĠĠ Ġval Ġfa ded Primary Ġ= ĠMaterial Theme . colors . fa ded Primary . composite Over ( Material Theme . colors . surface ) ĊĠĠĠ Ġval Ġcard Color Ġ= Ġwhen Ġ( vote Status . value ) Ġ{ ĊĠĠĠĠĠĠĠ ĠV ote Status . UN V OT ED Ġ-> Ġfa ded Primary ĊĠĠĠĠĠĠĠ ĠV ote Status . UP Ġ-> Ġup vote Color ĊĠĠĠĠĠĠĠ ĠV ote Status . DOWN Ġ-> Ġdown vote Color ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġanimated Color Ġ= Ġanimate Color As State ( card Color ) ĊĊĠĠĠ ĠBox ( Modifier . padding ( 1 0 . dp ). fill Max Width ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠCard ( backgroundColor Ġ= Ġanimated Color . value , Ġshape Ġ= ĠRo unded Corner Shape ( 1 0 . dp ), Ġelevation Ġ= Ġ 2 . dp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠScore Section ( ĊĠĠĠ Ġmodifier : ĠModifier , ĊĠĠĠ Ġvote Status : ĠMutable State < Vote Status >, ĊĠĠĠ Ġtext Section : Ġ@ Composable Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġ// ĠReturn Ġvote Status Ġto Ġun v oted - on Ġif Ġthe Ġsame Ġarrow Ġis Ġclicked Ġa Ġsecond Ġtime ĊĠĠĠ Ġval Ġon Selected Ġ= Ġ{ Ġtarget Value : ĠV ote Status Ġ-> ĊĠĠĠĠĠĠĠ Ġ{ Ġselected : ĠBoolean Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Ġ&& Ġvote Status . value Ġ!= Ġtarget Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvote Status . value Ġ= Ġtarget Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvote Status . value Ġ= ĠV ote Status . UN V OT ED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ ĠV ote Arrow ( ĊĠĠĠĠĠĠĠ Ġmodifier , ĊĠĠĠĠĠĠĠ ĠR . drawable . ic _ baseline _ arrow _ drop _ up _ 2 4 , ĊĠĠĠĠĠĠĠ Ġvote Status . value Ġ== ĠV ote Status . UP , ĊĠĠĠĠĠĠĠ Ġon Selected ( Vote Status . UP ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġtext Section () ĊĠĠĠ ĠV ote Arrow ( ĊĠĠĠĠĠĠĠ Ġmodifier , ĊĠĠĠĠĠĠĠ ĠR . drawable . ic _ baseline _ arrow _ drop _ down _ 2 4 , ĊĠĠĠĠĠĠĠ Ġvote Status . value Ġ== ĠV ote Status . DOWN , ĊĠĠĠĠĠĠĠ Ġon Selected ( Vote Status . DOWN ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠV ote Arrow ( ĊĠĠĠ Ġmodifier : ĠModifier , ĊĠĠĠ Ġvector Resource : ĠInt , ĊĠĠĠ Ġselected : ĠBoolean , ĊĠĠĠ Ġon Selected : Ġ( Boolean ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġvector Ġ= ĠImage Vector . vector Resource ( vector Resource ) ĊĠĠĠ Ġval Ġt int Color Ġ= Ġanimate Color As State ( if Ġ( selected ) ĠMaterial Theme . colors . on Primary Ġelse ĠMaterial Theme . colors . fa ded On Primary ) ĊĠĠĠ Ġval Ġpainter Ġ= Ġremember Vector Painter ( vector ) ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier . toggle able ( value Ġ= Ġselected , Ġon Value Change Ġ= Ġon Selected ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( width Ġ= Ġ 2 4 . dp , Ġheight Ġ= Ġ 2 4 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. paint ( p ainter , Ġcolor Filter Ġ= ĠColor Filter . tint ( tint Color . value )) ĊĠĠĠ Ġ) Ċ } Ċ