/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠPeter ĠKen ji ĠY aman aka Ċ Ġ* Ċ Ġ* Ġ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 . py am soft . tick ert ape . home Ċ Ċ import Ġandroidx . compose . animation . Animated Visibility Ċ import Ġandroidx . compose . animation . Cross fade Ċ import Ġandroidx . compose . animation . Experimental Animation Api Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . lazy . Lazy Row Ċ import Ġandroidx . compose . foundation . lazy . items Indexed Ċ import Ġandroidx . compose . material . Circular Progress Indicator Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Surface Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . text . style . Text Align Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . py am soft . tick ert ape . home . item . Home Watch list Item Ċ import Ġcom . py am soft . tick ert ape . quote . Ticker Ċ import Ġcom . py am soft . tick ert ape . quote . test . new Test Chart Ċ import Ġcom . py am soft . tick ert ape . quote . test . new Test Quote Ċ import Ġcom . py am soft . tick ert ape . stocks . api . as Symbol Ċ Ċ @ Composable Ċ @ Opt In ( Experimental Animation Api :: class ) Ċ internal Ġfun ĠHome Watch list ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġstate : ĠHome Watch ListView State , ĊĠĠĠ ĠonClick ed : Ġ( Ticker ) Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠ Ġval ĠisLoading Ġ= Ġstate . isLoading Watch list ĊĠ Ġval Ġtick ers Ġ= Ġstate . watch list ĊĠ Ġval Ġerror Ġ= Ġstate . watch list Error ĊĊĠ Ġval Ġcount Ġ= Ġremember ( tick ers ) Ġ{ Ġtick ers . size Ġ} ĊĠ Ġval Ġis Visible Ġ= Ġremember ( count ) Ġ{ Ġcount Ġ> Ġ 0 Ġ} ĊĠ Ġval Ġis List Visible Ġ= Ġremember ( isVisible , ĠisLoading ) Ġ{ Ġis Visible Ġ|| ĠisLoading Ġ} ĊĊĠ ĠCross fade ( ĊĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier , ĊĠĠĠĠĠ Ġtarget State Ġ= Ġerror , ĊĠ Ġ) Ġ{ Ġerr Ġ-> ĊĠĠĠ Ġif Ġ( err Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠ ĠAnimated Visibility ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( start Ġ= Ġ 1 6 . dp , Ġbottom Ġ= Ġ 8 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisible Ġ= Ġis Visible , ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( start Ġ= Ġ 1 6 . dp , Ġbottom Ġ= Ġ 8 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" My ĠWatch list ${ if Ġ( count Ġ> Ġ 0 ) Ġ" ĠTop Ġ$ count " Ġelse Ġ"" }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Theme . typography . h 6 . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Bold , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠAnimated Visibility ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width (). height ( Home Screen Defaults . WATCH LIST _ HEIGHT _ DP . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisible Ġ= Ġis List Visible , ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠBox Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT icker List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . match Parent Size (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtick ers Ġ= Ġtick ers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= ĠonClick ed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoading ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= ĠisLoading , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . match Parent Size (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ ĠError ( ĊĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width (), ĊĠĠĠĠĠĠĠĠĠ Ġerror Ġ= Ġerr , ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ @ Opt In ( Experimental Animation Api :: class ) Ċ private Ġfun ĠLoading ( ĊĠĠĠ ĠisLoading : ĠBoolean , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , Ċ ) Ġ{ ĊĠ ĠAnimated Visibility ( ĊĠĠĠĠĠ Ġvisible Ġ= ĠisLoading , ĊĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier , ĊĠ Ġ) Ġ{ ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 1 6 . dp ), ĊĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center , ĊĠĠĠ Ġ) Ġ{ ĠCircular Progress Indicator () Ġ} ĊĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠT icker List ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġtick ers : ĠList < Ticker >, ĊĠĠĠ ĠonClick : Ġ( Ticker ) Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠ ĠLazy Row ( ĊĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier , ĊĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically , ĊĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . spaced By ( 8 . dp ), ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġitems Indexed ( ĊĠĠĠĠĠĠĠ Ġitems Ġ= Ġtick ers , ĊĠĠĠĠĠĠĠ Ġkey Ġ= Ġ{ Ġ_, Ġitem Ġ-> Ġitem . symbol . symbol () Ġ}, ĊĠĠĠ Ġ) Ġ{ Ġindex , Ġitem Ġ-> ĊĠĠĠĠĠ Ġ// ĠWe Ġcan Ġassume Ġhere Ġthe Ġchart Ġis Ġnot Ġnull ĊĠĠĠĠĠ ĠHome Watch list Item ( ĊĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . fill Max Height (). width ( Home Screen Defaults . ITEM _ WIDTH _ DP . dp ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġpadding ( start Ġ= Ġ 1 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtick ers . last Index Ġ-> Ġpadding ( end Ġ= Ġ 1 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠ Ġticker Ġ= Ġitem , ĊĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= ĠonClick , ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠError ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġerror : ĠThrowable , Ċ ) Ġ{ ĊĠ ĠColumn ( ĊĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . padding ( 1 6 . dp ), ĊĠĠĠĠĠ Ġvertical Arrange ment Ġ= ĠArrange ment . Center , ĊĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally , ĊĠ Ġ) Ġ{ ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġerror . message Ġ?: Ġ" An Ġunexpected Ġerror Ġoccurred ", ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Theme . typography . body 1 . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠMaterial Theme . colors . error , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠ Ġ) ĊĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( top Ġ= Ġ 1 6 . dp ), ĊĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Please Ġtry Ġagain Ġlater .", ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . body 2 , ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ Ċ @ Preview Ċ @ Composable Ċ private Ġfun ĠPreview Watch list () Ġ{ ĊĠ Ġval Ġsymbol Ġ= Ġ" MS FT ". as Symbol () ĊĠ ĠSurface Ġ{ ĊĠĠĠ ĠHome Watch list ( ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠHome Watch ListView State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġwatch list : ĠList < Ticker > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT icker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsymbol Ġ= Ġsymbol , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquote Ġ= Ġnew Test Quote ( symbol ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchart Ġ= Ġnew Test Chart ( symbol ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġwatch list Error : ĠThrowable ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval ĠisLoading Watch list : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ ĠonClick ed Ġ= Ġ{}, ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ