package Ġinfo . moe vm . mood le . ui . statistics Ċ Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . remember Scroll State Ċ import Ġandroidx . compose . foundation . shape . Circle Shape Ċ import Ġandroidx . compose . foundation . vertical Scroll Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . material . Icon Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled . Sort Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . runtime . save able . remember Save able Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġinfo . moe vm . mood le . R Ċ import Ġinfo . moe vm . mood le . data . statistics . UserData Ċ import Ġinfo . moe vm . mood le . model . Post Ċ import Ġinfo . moe vm . mood le . ui . App Drawer Ċ import Ġinfo . moe vm . mood le . ui . Screen Ċ import Ġinfo . moe vm . mood le . ui . Swipe To Refresh Layout Ċ import Ġinfo . moe vm . mood le . ui . components .* Ċ import Ġinfo . moe vm . mood le . ui . state . Ui State Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . util .* Ċ Ċ @ Composable Ċ fun ĠOverview Screen ( ĊĠĠĠ Ġnavigate To : Ġ( Screen ) Ġ-> ĠUnit , ĊĠĠĠ Ġscaffold State : ĠScaffold State Ġ= Ġremember Sca ffold State () Ċ ) Ġ{ ĊĊĠĠĠ ĠOverview Screen ( ĊĠĠĠĠĠĠĠ Ġnavigate To Ġ= Ġnavigate To , ĊĠĠĠĠĠĠĠ Ġscaffold State Ġ= Ġscaffold State ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Suppress (" unused ") Ċ @ Opt In ( Experimental Material Api :: class ) Ċ @ Composable Ċ fun ĠOverview Screen ( ĊĠĠĠ Ġposts : ĠUi State < List < Post >>, ĊĠĠĠ Ġfavor ites : ĠSet < String >, ĊĠĠĠ Ġon Toggle Favorite : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Refresh Posts : Ġ() Ġ-> ĠUnit , ĊĠĠĠ ĠonError Dismiss : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġnavigate To : Ġ( Screen ) Ġ-> ĠUnit , ĊĠĠĠ Ġscaffold State : ĠScaffold State Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( posts . has Error ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= Ġstring Resource ( id Ġ= ĠR . string . load _ error ) ĊĠĠĠĠĠĠĠ Ġval Ġretry Message Ġ= Ġstring Resource ( id Ġ= ĠR . string . retry ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠShow Ġsn ackbar Ġusing Ġa Ġcoroutine , Ġwhen Ġthe Ġcoroutine Ġis Ġcancelled Ġthe Ġsn ackbar Ġwill ĊĠĠĠĠĠĠĠ Ġ// Ġautomatically Ġdismiss . ĠThis Ġcoroutine Ġwill Ġcancel Ġwhenever Ġposts . has Error Ġchanges , Ġand ĊĠĠĠĠĠĠĠ Ġ// Ġonly Ġstart Ġwhen Ġposts . has Error Ġis Ġtrue Ġ( due Ġto Ġthe Ġabove Ġif - check ). ĊĠĠĠĠĠĠĠ ĠLa unched Effect ( posts . has Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ackbar Result Ġ= Ġscaffold State . sn ackbar Host State . show Snackbar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= ĠerrorMessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Label Ġ= Ġretry Message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( sn ackbar Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar Result . ActionPerformed Ġ-> Ġon Refresh Posts () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar Result . Dis missed Ġ-> ĠonError Dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġall Scre ens Ġ= ĠSettings Screen For Statistics . values (). toList () ĊĠĠĠ Ġvar Ġcurrent Screen Ġby Ġremember Save able Ġ{ Ġmutable State Of ( Settings Screen For Statistics . Overview ) Ġ} ĊĠĠĠ Ġval Ġcoroutine Scope Ġ= Ġremember Coroutine Scope () ĊĠĠĠ ĠScaffold ( ĊĠĠĠĠĠĠĠ Ġscaffold State Ġ= Ġscaffold State , ĊĠĠĠĠĠĠĠ Ġtop Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatistics Top AppBar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscaffold State Ġ= Ġscaffold State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Scre ens Ġ= Ġall Scre ens , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Tab Selected Ġ= Ġ{ Ġscreen Ġ-> Ġcurrent Screen Ġ= Ġscreen Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Screen Ġ= Ġcurrent Screen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġdrawer Content Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Drawer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Screen Ġ= ĠScreen . Statistics , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Drawer Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscaffold State . drawer State . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Ġ= Ġnavigate To ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ġ{ Ġinner Padding Ġ-> ĊĠĠĠĠĠĠĠ ĠBox ( Modifier . padding ( inner Padding )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Screen . Content ( on Screen Change Ġ= Ġ{ Ġscreen Ġ-> Ġcurrent Screen Ġ= Ġscreen Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠLoading Content ( ĊĠĠĠ Ġempty : ĠBoolean , ĊĠĠĠ Ġempty Content : Ġ@ Composable Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġloading : ĠBoolean , ĊĠĠĠ Ġon Refresh : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġcontent : Ġ@ Composable Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( empty ) Ġ{ ĊĠĠĠĠĠĠĠ Ġempty Content () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠSw ipe To Refresh Layout ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh ing State Ġ= Ġloading , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Refresh Ġ= Ġon Refresh , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Indicator Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSurface ( elevation Ġ= Ġ 1 0 . dp , Ġshape Ġ= ĠCircle Shape ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCircular Progress Indicator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( 3 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 4 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġcontent , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠOverview Body ( on Screen Change : Ġ( Settings Screen For Statistics ) Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġval Ġscroll State Ġ= Ġremember Scroll State () ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. vertical Scroll ( scroll State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( Padding Values ( 1 6 . dp )) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAlert Card () ĊĠĠĠĠĠĠĠ ĠSp acer ( Modifier . height ( Statistics Default Padding )) ĊĠĠĠĠĠĠĠ ĠCour ses Card ( on Screen Change ) ĊĠĠĠĠĠĠĠ ĠSp acer ( Modifier . height ( Statistics Default Padding )) ĊĠĠĠĠĠĠĠ ĠStudent s Card ( on Screen Change ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠAlert Card () Ġ{ ĊĠĠĠ Ġvar Ġshow Dialog Ġby Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTODO : ĊĠĠĠĠ Ġ* ĠAdd Ġalert Ġmessage Ġfor Ġsome Ġstatistics Ġreasons . ĊĠĠĠĠ Ġ* ĠFor Ġexample , Ġfor Ġoutdated Ġstudents Ġfor Ġcourse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġalert Message Ġ= Ġstring Resource ( R . string . alert _ message ) ĊĊĠĠĠ Ġif Ġ( show Dialog ) Ġ{ ĊĠĠĠĠĠĠĠ ĠStatistics AlertDialog ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dialog Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Text Ġ= Ġalert Message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Text Ġ= Ġ" Dismiss ". toUpperCase ( Locale . ROOT ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ ĠCard Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlert Header Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dialog Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatistics Divider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( start Ġ= ĠStatistics Default Padding , Ġend Ġ= ĠStatistics Default Padding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlert Item ( alert Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠAlert Header ( onClick See All : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( Statistics Default Padding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width (), ĊĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Space Between ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠComp osition Local Provider ( Local Content Alpha Ġprovides ĠContent Alpha . high ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( R . string . alert ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . subtitle 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . align ( Alignment . Center Vert ically ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠText Button ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= ĠonClick See All , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Padding Ġ= ĠPadding Values ( 0 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . align ( Alignment . Center Vert ically ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( R . string . see _ all ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . button , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠAlert Item ( message : ĠString ) Ġ{ ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( Statistics Default Padding ), ĊĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Space Between ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠComp osition Local Provider ( Local Content Alpha Ġprovides ĠContent Alpha . high ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . body 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . weight ( 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . align ( Alignment . Top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( Icons . Filled . Sort , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBase Ġstructure Ġfor Ġcards Ġin Ġthe ĠOverview Ġscreen . Ċ Ġ*/ Ċ Ċ @ Composable Ċ private Ġfun Ġ< T > ĠOverview Screen Card ( ĊĠĠĠ Ġtitle : ĠString , ĊĠĠĠ Ġamount : ĠFloat , ĊĠĠĠ ĠonClick See All : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġvalues : Ġ( T ) Ġ-> ĠFloat , ĊĠĠĠ Ġcolors : Ġ( T ) Ġ-> ĠColor , ĊĠĠĠ Ġdata : ĠList < T >, ĊĠĠĠ Ġrow : Ġ@ Composable Ġ( T ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠCard Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( Modifier . padding ( Statistics Default Padding )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġtitle , Ġstyle Ġ= ĠMaterial Theme . typography . subtitle 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamount Text Ġ= Ġstring Resource ( R . string . amount ) Ġ+ Ġformat Amount ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġamount Text , Ġstyle Ġ= ĠMaterial Theme . typography . h 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOver View Divider ( data , Ġvalues , Ġcolors ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( Modifier . padding ( start Ġ= Ġ 1 6 . dp , Ġtop Ġ= Ġ 4 . dp , Ġend Ġ= Ġ 8 . dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . take ( SHO WN _ ITEMS ). forEach Ġ{ Ġrow ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSee All Button ( onClick Ġ= ĠonClick See All ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun Ġ< T > ĠOver View Divider ( ĊĠĠĠ Ġdata : ĠList < T >, ĊĠĠĠ Ġvalues : Ġ( T ) Ġ-> ĠFloat , ĊĠĠĠ Ġcolors : Ġ( T ) Ġ-> ĠColor Ċ ) Ġ{ ĊĠĠĠ ĠRow ( Modifier . fill Max Width ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . forEach Ġ{ Ġitem : ĠT Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. weight ( values ( item )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( 1 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( colors ( item )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠThe ĠCour ses Ġcard Ċ Ġ*/ Ċ @ Composable Ċ private Ġfun ĠCour ses Card ( on Screen Change : Ġ( Settings Screen For Statistics ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġamount Ġ= ĠUser Data . courses . map Ġ{ Ġcourses Ġ-> Ġcourses . percent Ġ}. sum () ĊĠĠĠ ĠOverview Screen Card ( ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġstring Resource ( R . string . accounts ), ĊĠĠĠĠĠĠĠ Ġamount Ġ= Ġamount , ĊĠĠĠĠĠĠĠ ĠonClick See All Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Screen Change ( Settings Screen For Statistics . Courses ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġdata Ġ= ĠUser Data . courses , ĊĠĠĠĠĠĠĠ Ġcolors Ġ= Ġ{ Ġit . color Ġ}, ĊĠĠĠĠĠĠĠ Ġvalues Ġ= Ġ{ Ġit . percent Ġ} ĊĠĠĠ Ġ) Ġ{ Ġcourse Ġ-> ĊĠĠĠĠĠĠĠ ĠSuccess Courses Row ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġcourse . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Ġ= Ġcourse . number , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpercent Ġ= Ġcourse . percent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcourse . color ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ /** Ċ Ġ* ĠThe ĠStudent s Ġcard Ċ Ġ*/ Ċ @ Composable Ċ private Ġfun ĠStudent s Card ( on Screen Change : Ġ( Settings Screen For Statistics ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġamount Ġ= ĠUser Data . students . map Ġ{ Ġstudents Ġ-> Ġstudents . amount Ġ}. sum () ĊĠĠĠ ĠOverview Screen Card ( ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġstring Resource ( R . string . b ills ), ĊĠĠĠĠĠĠĠ Ġamount Ġ= Ġamount Ġ* Ġ 1 f , ĊĠĠĠĠĠĠĠ ĠonClick See All Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Screen Change ( Settings Screen For Statistics . Students ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġdata Ġ= ĠUser Data . students , ĊĠĠĠĠĠĠĠ Ġcolors Ġ= Ġ{ Ġit . color Ġ}, ĊĠĠĠĠĠĠĠ Ġvalues Ġ= Ġ{ Ġit . amount Ġ* Ġ 1 f Ġ} ĊĠĠĠ Ġ) Ġ{ Ġstudent Ġ-> ĊĠĠĠĠĠĠĠ ĠSuccess Students Row ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġstudent . course , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmark Ġ= Ġstudent . mark , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġstudent . amount , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġstudent . color ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠSee All Button ( onClick : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠText Button ( ĊĠĠĠĠĠĠĠ ĠonClick Ġ= ĠonClick , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( 4 4 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( string Resource ( R . string . see _ all )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval ĠStatistics Default Padding Ġ= Ġ 1 2 . dp Ċ Ċ private Ġconst Ġval ĠSHO WN _ ITEMS Ġ= Ġ 3 Ċ