package Ġcom . max por j . pager ound demo Ċ Ċ import Ġandroidx . compose . foundation . layout . Arrange ment Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġkotlin . math . ceil Ċ Ċ @ Composable Ċ fun ĠPage Round ( ĊĠĠĠ Ġcurrent : ĠInt , ĊĠĠĠ Ġext : ĠInt , ĊĠĠĠ Ġtotal Docs : ĠInt , ĊĠĠĠ ĠpageSize : ĠInt , ĊĠĠĠ ĠonClick : Ġ( Int ) Ġ-> ĠUnit , ĊĠĠĠ ĠRound Button : Ġ@ Composable Ġ( Int , ĠBoolean , Ġ( Int ) Ġ-> ĠUnit )-> Unit , ĊĠĠĠ ĠRound Interval : Ġ@ Composable Ġ() Ġ-> ĠUnit , Ċ ) Ġ{ ĊĊĠĠĠ Ġval Ġmax Right Ġ= Ġceil ( total Docs . toDouble () Ġ/ ĠpageSize . toDouble ()) ĊĠĠĠ Ġval Ġmax Right Int Ġ= Ġmax Right . toInt () ĊĊĠĠĠ Ġval Ġba Ġ= Ġcalc Pag inate Array ( current Ġ= Ġcurrent , Ġext Ġ= Ġext , Ġmax Right Ġ= Ġmax Right Int ) ĊĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill MaxSize (), ĊĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠAlignment . Center Vert ically , ĊĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Space Between ĊĠĠĠ Ġ) Ġ{ Ċ Ċ // ĠĠĠĠĠĠĠ Ġval Ġmodifier Ġ= ĠModifier . width ( 0 . dp ). weight ( 1 f ) ĊĠĠĠĠĠĠĠ Ġval Ġmodifier Ġ= ĠModifier . weight ( 1 f ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ba [ 0 ] Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( modifier Ġ= Ġmodifier ) Ġ{ ĠRound Button ( 1 , Ġ 1 Ġ== Ġcurrent , ĠonClick ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ba [ 0 ] Ġ!= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( modifier Ġ= Ġmodifier ) Ġ{ ĠRound Interval () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġba . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( modifier Ġ= Ġmodifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRound Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ== Ġcurrent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ba [ ba . size Ġ- Ġ 1 ] Ġ!= Ġmax Right Int ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ba [ ba . size Ġ- Ġ 1 ] Ġ!= Ġmax Right Int Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( modifier Ġ= Ġmodifier ) Ġ{ ĠRound Interval () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( modifier Ġ= Ġmodifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRound Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Right Int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Right Int Ġ== Ġcurrent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun Ġcalc Pag inate Array ( current : ĠInt , Ġext : ĠInt , Ġmax Right : ĠInt ): ĠMutable List < Int > Ġ{ ĊĊĠĠĠ Ġval Ġba Ġ= Ġmutable ListOf < Int >( current ) ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġba . add (( current Ġ+ Ġ 1 ) Ġ+ Ġi ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġba . add ( 0 , Ġ( current Ġ- Ġ 1 ) Ġ- Ġi ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ba [ 0 ] Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġba . remove First OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadd Right Ġ= Ġba [ ba . size Ġ- Ġ 1 ] Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( add Right Ġ<= Ġmax Right ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġba . add ( add Right ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ba [ ba . size Ġ- Ġ 1 ] Ġ> Ġmax Right ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġba . remove Last OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadd Left Ġ= Ġba [ 0 ] Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( add Left Ġ>= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġba . add ( 0 , Ġadd Left ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġba Ċ }