package Ġcom . b aw p . f reader . components Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . compose . animation . core . Spring Ċ import Ġandroidx . compose . animation . core . animate Dp As State Ċ import Ġandroidx . compose . animation . core . spring Ċ import Ġandroidx . compose . foundation . Image Ċ import Ġandroidx . compose . foundation . click able Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . shape . Rounded Corner Shape Ċ import Ġandroidx . compose . foundation . text . Keyboard Actions Ċ import Ġandroidx . compose . foundation . text . Keyboard Options Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled .* Ċ import Ġandroidx . compose . material . icons . rounded . Favorite Border Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Experimental Compose Ui Api Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . clip Ċ import Ġandroidx . compose . ui . draw . scale Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . graphics . vector . Image Vector Ċ import Ġandroidx . compose . ui . input . pointer . pointer Interop Filter Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . text . TextStyle Ċ import Ġandroidx . compose . ui . text . font . FontStyle Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . text . input . I me Action Ċ import Ġandroidx . compose . ui . text . input . Keyboard Type Ċ import Ġandroidx . compose . ui . text . input . Password Visual Transformation Ċ import Ġandroidx . compose . ui . text . input . Visual Transformation Ċ import Ġandroidx . compose . ui . text . style . Text Align Ċ import Ġandroidx . compose . ui . text . style . Text Overflow Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġco il . compose . remember Image Painter Ċ import Ġcom . b aw p . f reader . R Ċ import Ġcom . b aw p . f reader . model . MB ook Ċ import Ġcom . b aw p . f reader . navigation . Reader Scre ens Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ Ċ @ Composable Ċ fun ĠReader Logo ( modifier : ĠModifier Ġ= ĠModifier ) Ġ{ ĊĠĠĠ ĠText ( text Ġ= Ġ" A . ĠReader ", ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . padding ( bottom Ġ= Ġ 1 6 . dp ), ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . h 3 , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . Red . copy ( alpha Ġ= Ġ 0 . 5 f )) Ċ } ĊĊ Ċ @ Composable Ċ fun ĠEmail Input ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġemail State : ĠMutable State < String >, ĊĠĠĠ Ġlabel Id : ĠString Ġ= Ġ" Email ", ĊĠĠĠ Ġenabled : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġ ime Action : ĠI me Action Ġ= ĠI me Action . Next , ĊĠĠĠ Ġon Action : ĠKeyboard Actions Ġ= ĠKeyboard Actions . Default ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠ ĠInput Field ( modifier Ġ= Ġmodifier , ĊĠĠĠĠĠĠĠ Ġvalue State Ġ= Ġemail State , ĊĠĠĠĠĠĠĠ Ġlabel Id Ġ= Ġlabel Id , ĊĠĠĠĠĠĠĠ Ġenabled Ġ= Ġenabled , ĊĠĠĠĠĠĠĠ Ġkeyboard Type Ġ= ĠKeyboard Type . Email , ĊĠĠĠĠĠĠĠ Ġ ime Action Ġ= Ġ ime Action , ĊĠĠĠĠĠĠĠ Ġon Action Ġ= Ġon Action ) ĊĊ Ċ } Ċ Ċ @ Composable Ċ fun ĠInput Field ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġvalue State : ĠMutable State < String >, ĊĠĠĠ Ġlabel Id : ĠString , ĊĠĠĠ Ġenabled : ĠBoolean , ĊĠĠĠ Ġis Single Line : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġkeyboard Type : ĠKeyboard Type Ġ= ĠKeyboard Type . Text , ĊĠĠĠ Ġ ime Action : ĠI me Action Ġ= ĠI me Action . Next , ĊĠĠĠ Ġon Action : ĠKeyboard Actions Ġ= ĠKeyboard Actions . Default ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ ĠOut lined TextField ( value Ġ= Ġvalue State . value , ĊĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġ{ Ġvalue State . value Ġ= Ġit }, ĊĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ{ ĠText ( text Ġ= Ġlabel Id )}, ĊĠĠĠĠĠĠĠ Ġsingle Line Ġ= Ġis Single Line , ĊĠĠĠĠĠĠĠ Ġtext Style Ġ= ĠTextStyle ( fontSize Ġ= Ġ 1 8 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠMaterial Theme . colors . on Background ), ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( bottom Ġ= Ġ 1 0 . dp , Ġstart Ġ= Ġ 1 0 . dp , Ġend Ġ= Ġ 1 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width (), ĊĠĠĠĠĠĠĠ Ġenabled Ġ= Ġenabled , ĊĠĠĠĠĠĠĠ Ġkeyboard Options Ġ= ĠKeyboard Options ( keyboard Type Ġ= Ġkeyboard Type , Ġ ime Action Ġ= Ġ ime Action ), ĊĠĠĠĠĠĠĠ Ġkeyboard Actions Ġ= Ġon Action ) ĊĊ Ċ } Ċ Ċ @ Composable Ċ fun ĠPassword Input ( ĊĠĠĠ Ġmodifier : ĠModifier , ĊĠĠĠ Ġpassword State : ĠMutable State < String >, ĊĠĠĠ Ġlabel Id : ĠString , ĊĠĠĠ Ġenabled : ĠBoolean , ĊĠĠĠ Ġpassword Visibility : ĠMutable State < Boolean >, ĊĠĠĠ Ġ ime Action : ĠI me Action Ġ= ĠI me Action . Done , ĊĠĠĠ Ġon Action : ĠKeyboard Actions Ġ= ĠKeyboard Actions . Default , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ Ġval Ġvisual Transformation Ġ= Ġif Ġ( password Visibility . value ) ĠVisual Transformation . None Ġelse ĊĠĠĠĠĠĠĠ ĠPassword Visual Transformation () ĊĠĠĠ ĠOut lined TextField ( value Ġ= Ġpassword State . value , ĊĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword State . value Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ{ ĠText ( text Ġ= Ġlabel Id )}, ĊĠĠĠĠĠĠĠ Ġsingle Line Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġtext Style Ġ= ĠTextStyle ( fontSize Ġ= Ġ 1 8 . sp , Ġcolor Ġ= ĠMaterial Theme . colors . on Background ), ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( bottom Ġ= Ġ 1 0 . dp , Ġstart Ġ= Ġ 1 0 . dp , Ġend Ġ= Ġ 1 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width (), ĊĠĠĠĠĠĠĠ Ġenabled Ġ= Ġenabled , ĊĠĠĠĠĠĠĠ Ġkeyboard Options Ġ= ĠKeyboard Options ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Type Ġ= ĠKeyboard Type . Password , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ ime Action Ġ= Ġ ime Action ), ĊĠĠĠĠĠĠĠ Ġvisual Transformation Ġ= Ġvisual Transformation , ĊĠĠĠĠĠĠĠ Ġtrailing Icon Ġ= Ġ{ Password Visibility ( password Visibility Ġ= Ġpassword Visibility )}, ĊĠĠĠĠĠĠĠ Ġkeyboard Actions Ġ= Ġon Action ) Ċ Ċ } Ċ Ċ @ Composable Ċ fun ĠPassword Visibility ( password Visibility : ĠMutable State < Boolean >) Ġ{ ĊĠĠĠ Ġval Ġvisible Ġ= Ġpassword Visibility . value ĊĠĠĠ ĠIcon Button ( onClick Ġ= Ġ{ Ġpassword Visibility . value Ġ= Ġ! visible }) Ġ{ ĊĠĠĠĠĠĠĠ ĠIcons . Default . Close ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Composable Ċ fun ĠBook Rating ( score : ĠDouble Ġ= Ġ 4 . 5 ) Ġ{ ĊĠĠĠ ĠSurface ( modifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠ Ġ. height ( 7 0 . dp ) ĊĠĠĠĠĠĠĠ Ġ. padding ( 4 . dp ), ĊĠĠĠĠĠĠĠ Ġshape Ġ= ĠRo unded Corner Shape ( 5 6 . dp ), ĊĠĠĠĠĠĠĠ Ġelevation Ġ= Ġ 6 . dp , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . White ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( modifier Ġ= ĠModifier . padding ( 4 . dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( image Vector Ġ= ĠIcons . Filled . Star Border , Ġcontent Description Ġ= Ġ" Start ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 3 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġscore . toString (), Ġstyle Ġ= ĠMaterial Theme . typography . subtitle 1 ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊ Ċ } Ċ Ċ @ Composable Ċ fun ĠList Card ( book : ĠM Book , ĊĠĠĠĠĠĠĠĠĠĠĠĠ ĠonPress Details : Ġ( String ) Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĠĠĠ Ġval Ġresources Ġ= Ġcontext . resources ĊĊĠĠĠ Ġval Ġdisplay Metrics Ġ= Ġresources . display Metrics ĊĊĠĠĠ Ġval Ġscreen Width Ġ= Ġdisplay Metrics . width Pixels Ġ/ Ġdisplay Metrics . density ĊĠĠĠ Ġval Ġspacing Ġ= Ġ 1 0 . dp ĊĊĠĠĠ ĠCard ( shape Ġ= ĠRo unded Corner Shape ( 2 9 . dp ), ĊĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠColor . White , ĊĠĠĠĠĠĠĠ Ġelevation Ġ= Ġ 6 . dp , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( 2 4 2 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( 2 0 2 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able Ġ{ ĠonPress Details . invoke ( book . title . toString ()) Ġ}) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠColumn ( modifier Ġ= ĠModifier . width ( screen Width . dp Ġ- Ġ( spacing Ġ* Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRow ( horizontal Arrange ment Ġ= ĠArrange ment . Center ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( p ainter Ġ= Ġremember Image Painter ( data Ġ= Ġbook . photoUrl . toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" book Ġimage ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( 1 4 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( 1 0 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 4 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . width ( 5 0 . dp )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( modifier Ġ= ĠModifier . padding ( top Ġ= Ġ 2 5 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Arrange ment Ġ= ĠArrange ment . Center , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( image Vector Ġ= ĠIcons . Rounded . Favorite Border , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" Fav ĠIcon ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( bottom Ġ= Ġ 1 . dp )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBook Rating ( score Ġ= Ġbook . rating !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġbook . title . toString (), Ġmodifier Ġ= ĠModifier . padding ( 4 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontWeight Ġ= ĠFontWeight . Bold , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverflow Ġ= ĠText Overflow . El lipsis ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġbook . authors . toString (), Ġmodifier Ġ= ĠModifier . padding ( 4 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . caption ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġis Started Reading Ġ= Ġremember Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable State Of ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠRow ( horizontal Arrange ment Ġ= ĠArrange ment . End , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Bottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Started Reading . value Ġ= Ġbook . started Reading Ġ!= Ġnull ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠRo unded Button ( label Ġ= Ġif Ġ( is Started Reading . value ) Ġ Ġ" Reading " Ġelse Ġ" Not ĠY et ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġradius Ġ= Ġ 7 0 ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊ Ċ } Ċ Ċ @ Preview Ċ @ Composable Ċ fun ĠRo unded Button ( ĊĠĠĠ Ġlabel : ĠString Ġ= Ġ" Reading ", ĊĠĠĠ Ġradius : ĠInt Ġ= Ġ 2 9 , ĊĠĠĠ ĠonPress : Ġ() Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ ĠSurface ( modifier Ġ= ĠModifier . clip ( Rounded Corner Shape ( ĊĠĠĠĠĠĠĠ Ġbottom End Percent Ġ= Ġradius , ĊĠĠĠĠĠĠĠ Ġtop Start Percent Ġ= Ġradius )), ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( 0 xFF 9 2 CB DF )) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠColumn ( modifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( 9 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. height In ( 4 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able Ġ{ ĠonPress . invoke () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Arrange ment Ġ= ĠArrange ment . Center , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġlabel , Ġstyle Ġ= ĠTextStyle ( color Ġ= ĠColor . White , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 5 . sp ), ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊ Ċ } Ċ Ċ @ Composable Ċ fun ĠReader AppBar ( ĊĠĠĠ Ġtitle : ĠString , ĊĠĠĠ Ġicon : ĠImage Vector ? Ġ= Ġnull , ĊĠĠĠ Ġshow Profile : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġnav Controller : ĠNav Controller , ĊĠĠĠ Ġon Back Arrow Clicked : () Ġ-> ĠUnit Ġ= Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ ĠTop AppBar ( title Ġ= Ġ{ ĊĠĠĠĠĠĠĠ ĠRow ( vertical Alignment Ġ= ĠAlignment . Center Vert ically ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Profile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( image Vector Ġ= ĠIcons . Default . Favorite , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" Logo ĠIcon ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clip ( Rounded Corner Shape ( 1 2 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale ( 0 . 9 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( icon Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( image Vector Ġ= Ġicon , Ġcontent Description Ġ= Ġ" arrow Ġback ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt int Ġ= ĠColor . Red . copy ( alpha Ġ= Ġ 0 . 7 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . click able Ġ{ Ġon Back Arrow Clicked . invoke () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . width ( 4 0 . dp ) Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . Red . copy ( alpha Ġ= Ġ 0 . 7 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠTextStyle ( font Weight Ġ= ĠFontWeight . Bold , ĠfontSize Ġ= Ġ 2 0 . sp )) ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġactions Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Button ( onClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Auth . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sign Out (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( Reader Scre ens . Login Screen . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Profile ) ĠRow () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( image Vector Ġ= ĠIcons . Filled . Logout Ġ, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" Logout " Ġ, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġt int Ġ= ĠColor . Green . copy ( alpha Ġ= Ġ 0 . 4 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else ĠBox Ġ{} ĊĊ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠColor . Transparent , ĊĠĠĠĠĠĠĠ Ġelevation Ġ= Ġ 0 . dp ) Ċ Ċ } Ċ Ċ @ Composable Ċ fun ĠF AB Content ( on Tap : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠFloating ActionButton ( onClick Ġ= Ġ{ ĠonTap ()}, ĊĠĠĠĠĠĠĠ Ġshape Ġ= ĠRo unded Corner Shape ( 5 0 . dp ), ĊĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠColor ( 0 xFF 9 2 CB DF )) Ġ{ ĊĠĠĠĠĠĠĠ ĠIcon ( image Vector Ġ= ĠIcons . Default . Add , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" Add Ġa ĠBook ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt int Ġ= ĠColor . White ) ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Composable Ċ fun ĠTitle Section ( modifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel : ĠString ) Ġ{ ĊĠĠĠ ĠSurface ( modifier Ġ= Ġmodifier . padding ( start Ġ= Ġ 5 . dp , Ġtop Ġ= Ġ 1 . dp )) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġlabel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 9 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfont Style Ġ= ĠFont Style . Normal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Left ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ // Rating ĠBar Ċ @ Experimental Compose Ui Api Ċ @ Composable Ċ fun ĠRating Bar ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġrating : ĠInt , ĊĠĠĠ ĠonPress Rating : Ġ( Int ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġvar Ġrating State Ġby Ġremember Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable State Of ( rating ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġselected Ġby Ġremember Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable State Of ( false ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġsize Ġby Ġanimate Dp As State ( ĊĠĠĠĠĠĠĠ Ġtarget Value Ġ= Ġif Ġ( selected ) Ġ 4 2 . dp Ġelse Ġ 3 4 . dp , ĊĠĠĠĠĠĠĠ Ġspring ( Spring . D amping Ratio Medium Bo unc y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . width ( 2 8 0 . dp ), ĊĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically , ĊĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Center ĊĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Ġ= Ġpainter Resource ( id Ġ= ĠR . drawable . ic _ baseline _ star _ 2 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" star ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. pointer Interop Filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonPress Rating ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrating State Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt int Ġ= Ġif Ġ( i Ġ<= Ġrating State ) ĠColor ( 0 xFFFF D 7 0 0 ) Ġelse ĠColor ( 0 xFF A 2 AD B 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun Ġshow Toast ( context : ĠContext , Ġmsg : ĠString ) Ġ{ ĊĠĠĠ ĠToast . makeText ( context , Ġmsg , ĠToast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠ Ġ. show () Ċ } ĊĊĊ