package Ġcom . goo fy . goo ber . compose lab . lists . animations Ċ Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . compose . animation . Enter Exit State Ċ import Ġandroidx . compose . animation . core . animate Float Ċ import Ġandroidx . compose . foundation . Image Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . layout . Arrange ment Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . layout . Spacer Ċ import Ġandroidx . compose . foundation . layout . aspect Ratio Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . height Ċ import Ġandroidx . compose . foundation . layout . offset Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . foundation . layout . width Ċ import Ġandroidx . compose . foundation . layout . wrap Content Height Ċ import Ġandroidx . compose . foundation . layout . wrap Content Size Ċ import Ġandroidx . compose . material . Button Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Immutable Ċ import Ġandroidx . compose . runtime . Stable Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . key Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . graphics . graphics Layer Ċ import Ġandroidx . compose . ui . layout . Content Scale Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . goo fy . goo ber . compose lab . R Ċ import Ġcom . goo fy . goo ber . compose lab . animations . Direction Ċ import Ġcom . goo fy . goo ber . compose lab . animations . Slide Animated Visibility Lab Ċ import Ġcom . goo fy . goo ber . compose lab . animations . Slide Animated Visibility State Ċ import Ġjava . util . UUID Ċ Ċ private Ġconst Ġval ĠRotation Deg Ġ= Ġ 9 0 f Ċ Ċ @ Composable Ċ fun ĠSlide Item Visibility Z Stack () Ġ{ ĊĠĠĠ ĠBox ( modifier Ġ= ĠModifier . fill MaxSize ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġremember Ġ{ ĠV iny l Images . map Ġ{ ĠListItem ( p ainter Res Ġ= Ġit ) Ġ} Ġ} ĊĠĠĠĠĠĠĠ ĠZ Stack ( list , Ġmodifier Ġ= ĠModifier . align ( Alignment . Center )) ĊĠĠĠĠĠĠĠ ĠControls ( list , Ġmodifier Ġ= ĠModifier . align ( Alignment . Bottom Center )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠZ Stack ( list : ĠList < ListItem >, Ġmodifier : ĠModifier Ġ= ĠModifier ) Ġ{ ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier , ĊĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlist . forEach Indexed Ġ{ Ġindex , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey ( item . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSlide Animated Visibility Lab ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. align ( Alignment . Center ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. offset ( y Ġ= Ġ 1 6 . dp Ġ* Ġ- index ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġitem . visibility State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanimated Rot Z Ġby Ġtransition . animate Float ( label Ġ= Ġ" z Ġrotation ") Ġ{ Ġenter Exit State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Degrees ( enter Exit State , Ġitem . visibility State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( 2 0 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. aspect Ratio ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. graphics Layer Ġ{ Ġrotation Z Ġ= Ġanimated Rot Z Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Ġ= Ġpainter Resource ( item . p ainter Res ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Scale Ġ= ĠContent Scale . Fill Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠControls ( ĊĠĠĠ Ġlist : ĠList < ListItem >, ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġtop Index Ġby Ġremember Ġ{ Ġmutable State Of ( list . size Ġ- Ġ 1 ) Ġ} ĊĠĠĠ ĠInfo And Controls ( ĊĠĠĠĠĠĠĠ Ġlist [ top Index ]. visibility State , ĊĠĠĠĠĠĠĠ Ġon Remove Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist [ top Index ]. visibility State . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility . target State Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Index Ġ= Ġ( top Index Ġ- Ġ 1 ). coerce At Least ( 0 ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Restore Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Index Ġ= Ġ( top Index Ġ+ Ġ 1 ). coerce At Most ( list . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . get OrNull ( top Index )?. visibility State ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility . target State Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġon Direction Change Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist [ top Index ]. visibility State . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Direction . value Ġ= Ġin Direction . value . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Direction . value Ġ= Ġout Direction . value . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠInfo And Controls ( ĊĠĠĠ Ġstate : ĠSlide Animated Visibility State , ĊĠĠĠ Ġon Remove Click : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon Restore Click : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon Direction Change : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ{ ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. wrap Content Height (), ĊĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally , ĊĠĠĠĠĠĠĠ Ġvertical Arrange ment Ġ= ĠArrange ment . Center ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 1 0 0 . dp )) ĊĠĠĠĠĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. wrap Content Size () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 2 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Color . Transparent ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( Modifier . wrap Content Size ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġon Remove Click ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" remove ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 1 2 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġon Restore Click ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" restore ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . width ( 6 0 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġon Direction Change ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" toggle Ġremoval Ġdirection ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 4 0 . dp )) ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" in =${ state . in Direction . value . java Class . simple Name } Ġ Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" out =${ state . out Direction . value . java Class . simple Name }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 8 0 . dp )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun Ġrotation Degrees ( ĊĠĠĠ Ġenter Exit State : ĠEnter Exit State , ĊĠĠĠ Ġstate : ĠSlide Animated Visibility State Ċ ) Ġ= Ġwhen Ġ( enter Exit State ) Ġ{ ĊĠĠĠ ĠEnter Exit State . Pre Enter Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state . in Direction . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . In . Left Ġ-> Ġ- Rotation Deg ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . In . Right Ġ-> ĠRotation Deg ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . In . Up Ġ-> Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . In . Down Ġ-> Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ ĠEnter Exit State . Visible Ġ-> Ġ 0 f ĊĠĠĠ ĠEnter Exit State . Post Exit Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state . out Direction . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Out . Left Ġ-> Ġ- Rotation Deg ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Out . Right Ġ-> ĠRotation Deg ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Out . Up Ġ-> Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Out . Down Ġ-> Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Stable Ċ private Ġfun ĠDirection . In . next (): ĠDirection . In Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDirection . In . Left Ġ-> ĠDirection . In . Right ĊĠĠĠĠĠĠĠ ĠDirection . In . Right Ġ-> ĠDirection . In . Up ĊĠĠĠĠĠĠĠ ĠDirection . In . Up Ġ-> ĠDirection . In . Down ĊĠĠĠĠĠĠĠ ĠDirection . In . Down Ġ-> ĠDirection . In . Left ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Stable Ċ private Ġfun ĠDirection . Out . next (): ĠDirection . Out Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDirection . Out . Left Ġ-> ĠDirection . Out . Right ĊĠĠĠĠĠĠĠ ĠDirection . Out . Right Ġ-> ĠDirection . Out . Up ĊĠĠĠĠĠĠĠ ĠDirection . Out . Up Ġ-> ĠDirection . Out . Down ĊĠĠĠĠĠĠĠ ĠDirection . Out . Down Ġ-> ĠDirection . Out . Left ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Immutable Ċ private Ġdata Ġclass ĠListItem ( ĊĠĠĠ Ġval Ġvisibility State : ĠSlide Animated Visibility State Ġ= ĠSlide Animated Visibility State (), ĊĠĠĠ Ġval Ġid : ĠString Ġ= ĠUUID . randomUUID (). toString (), ĊĠĠĠ Ġ@ Drawable Res Ġval Ġpainter Res : ĠInt Ċ ) Ċ Ċ private Ġval ĠV iny l Images Ġ= ĠlistOf ( ĊĠĠĠ ĠR . drawable . v iny l 1 , ĊĠĠĠ ĠR . drawable . v iny l 2 , ĊĠĠĠ ĠR . drawable . v iny l 3 , ĊĠĠĠ ĠR . drawable . v iny l 4 , ĊĠĠĠ ĠR . drawable . v iny l 5 Ċ ) Ċ