package Ġcom . mat u gr . sample Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . activity . compose . setContent Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . material . Button Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . collect As State Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . text . style . Text Align Ċ import Ġandroidx . compose . ui . unit . Experimental Unit Api Ċ import Ġandroidx . compose . ui . unit . Text Unit Ċ import Ġandroidx . compose . ui . unit . Text Unit Type Ċ import Ġcom . mat u gr . sample . data . ui . Ui ViewState Ċ import Ġcom . mat u gr . sample . data . ui . View Action Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠSing ular , Ġcompose - based Ġactivity Ġfor Ġthe Ġsample Ġapp . ĠD riven Ġby Ġ[ Ui ViewState ]. Ċ Ġ*/ Ċ @ Experimental Unit Api Ċ @ Android EntryPoint Ċ class ĠAuth Demo Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġauth Demo ViewModel Ġby Ġview Models < Auth Demo ViewModel >() ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġactivity Url Launcher : ĠActivity Url Launcher ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Demo () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġauth Demo ViewModel . on Action ( View Action . Init ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġfun ĠAuth Demo () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġauth Demo ViewModel . view State . collect As State () ĊĠĠĠĠĠĠĠ Ġwhen ( val Ġui ViewState Ġ= Ġstate . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUi ViewState . Idle Ġ-> ĠId le () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUi ViewState . Loading Ġ-> ĠLoading ( ui ViewState . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUi ViewState . Author izing Ġ-> ĠAuthor izing () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUi ViewState . Display Token Ġ-> ĠDisplay Token ( ui ViewState . status , Ġui ViewState . expires In ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUi ViewState . Display Error Ġ-> ĠDisplay Error ( ui ViewState . error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġfun ĠId le () Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill MaxSize (), Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= ĠgetString ( R . string . idle _ state ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= ĠText Unit ( 2 0 . 0 f , ĠText Unit Type . Sp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextAlign Ġ= ĠText Align . Center ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Button () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġfun ĠLoading ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill MaxSize (), Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= ĠgetString ( R . string . loading _ general _ text ), ĠfontSize Ġ= ĠText Unit ( 2 0 . 0 f , ĠText Unit Type . Sp )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġmessage , ĠfontSize Ġ= ĠText Unit ( 2 0 . 0 f , ĠText Unit Type . Sp )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġfun ĠDisplay Token ( status : ĠString , Ġexpiry : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRow ( modifier Ġ= ĠModifier . fill Max Width (), Ġhorizontal Arrange ment Ġ= ĠArrange ment . Space Even ly ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( horizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= ĠgetString ( R . string . label _ token _ status ), Ġcolor Ġ= ĠColor . Gray , ĠfontSize Ġ= ĠText Unit ( 1 5 . 0 f , ĠText Unit Type . Sp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġstatus , ĠfontSize Ġ= ĠText Unit ( 2 0 . 0 f , ĠText Unit Type . Sp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( horizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= ĠgetString ( R . string . label _ token _ expiry ), Ġcolor Ġ= ĠColor . Gray , ĠfontSize Ġ= ĠText Unit ( 1 5 . 0 f , ĠText Unit Type . Sp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġexpiry , ĠfontSize Ġ= ĠText Unit ( 2 0 . 0 f , ĠText Unit Type . Sp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRow ( modifier Ġ= ĠModifier . fill Max Width (), Ġhorizontal Arrange ment Ġ= ĠArrange ment . Space Even ly ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġ{ Ġauth Demo ViewModel . on Action ( View Action . Fetch New Token ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= ĠgetString ( R . string . button _ fetch _ token )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġ{ Ġauth Demo ViewModel . on Action ( View Action . Logout ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= ĠgetString ( R . string . button _ logout )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġfun ĠAuthor izing () Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width (), Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= ĠgetString ( R . string . author izing ), ĠfontSize Ġ= ĠText Unit ( 2 0 . 0 f , ĠText Unit Type . Sp )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġ{ Ġauth Demo ViewModel . on Action ( View Action . Click Cancel ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= ĠgetString ( R . string . button _ cancel _ login )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġfun ĠDisplay Error ( error : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width (), Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġerror , ĠfontSize Ġ= ĠText Unit ( 2 0 . 0 f , ĠText Unit Type . Sp )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Button () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġfun ĠLogin Button () Ġ{ ĊĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġ{ Ġauth Demo ViewModel . on Action ( View Action . Click Login ( activity Url Launcher )) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= ĠgetString ( R . string . button _ login )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }