/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġandroidx . compose . samples . cr ane . ui Ċ Ċ import Ġandroidx . compose . foundation . Box Ċ import Ġandroidx . compose . foundation . Canvas Ċ import Ġandroidx . compose . foundation . layout . Dp Constraints Ċ import Ġandroidx . compose . foundation . layout . Stack Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . foundation . layout . offset Ċ import Ġandroidx . compose . foundation . layout . preferred Size In Ċ import Ġandroidx . compose . material . Experimental Material Api Ċ import Ġandroidx . compose . material . Fraction al Threshold Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Swipe able State Ċ import Ġandroidx . compose . material . remember Swipe able State Ċ import Ġandroidx . compose . material . swipe able Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . With Constraints Ċ import Ġandroidx . compose . ui . gesture . scroll orientation lock ing . Orientation Ċ import Ġandroidx . compose . ui . on Position ed Ċ import Ġandroidx . compose . ui . platform . Density Ambient Ċ import Ġandroidx . compose . ui . unit . Constraints Ċ import Ġandroidx . compose . ui . unit . Int Size Ċ import Ġandroidx . compose . ui . unit . dp Ċ Ċ enum Ġclass ĠFull Screen State Ġ{ ĊĠĠĠ ĠMin im ised , ĊĠĠĠ ĠCol lapsed , ĊĠĠĠ ĠEx pan ded , Ċ } Ċ Ċ // ĠBack drop Front Layer Ġis Ġmissing Ġa Ġproper Ġnested Ġscrolling Ġbehavior Ġas Ġright Ġnow , Ċ // Ġinstead Ġof Ġscrolling Ġonly Ġthe Ġparts Ġthat Ġare Ġvisible Ġon Ġthe Ġscreen , Ġit Ġscroll s Ċ // Ġall Ġits Ġcontent . ĠWaiting Ġfor Ġa ĠNested Scroll Controller Ġthat Ġmakes Ġthis Ġeasier : Ċ // Ġhttps :// issue tracker . google . com / 1 6 2 4 0 8 8 8 5 Ċ @ Opt In ( Experimental Material Api :: class ) Ċ @ Composable Ċ fun ĠBack drop Front Layer ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġback drop State : ĠSw ipe able State < FullScreen State > Ġ= ĊĠĠĠĠĠĠĠ Ġremember Swipe able State ( FullScreen State . Min im ised ), ĊĠĠĠ Ġstatic Children : Ġ@ Composable Ġ( Modifier ) Ġ-> ĠUnit , ĊĠĠĠ Ġback drop Children : Ġ@ Composable Ġ( Modifier ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġbackground Children Size Ġby Ġremember Ġ{ Ġmutable State Of ( Int Size ( 0 , Ġ 0 )) Ġ} ĊĊĠĠĠ ĠBox ( modifier . fill MaxSize ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠUse ĠConstraint Layout Ġin Ġthe Ġfuture Ġwhen ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// issue tracker . google . com / 1 5 9 1 0 3 8 1 7 Ġis Ġfixed ĊĠĠĠĠĠĠĠ ĠWith Constraints Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfull Height Ġ= Ġconstraints . max Height . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanchors Ġ= Ġget An chors ( background Children Size , Ġfull Height ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠStack ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . swipe able ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġback drop State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanchors Ġ= Ġanchors , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthresholds Ġ= Ġ{ Ġ_, Ġ_ Ġ-> ĠFraction al Threshold ( 0 . 5 f ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Ġ= ĠOrientation . Vertical , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatic Children ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . on Position ed Ġ{ Ġcoordinates Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( background Children Size . height Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback drop State . snap To ( FullScreen State . Collapsed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Children Size Ġ= Ġcoordinates . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshadow Color Ġ= ĠMaterial Theme . colors . surface . copy ( alpha Ġ= Ġ 0 . 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreveal Value Ġ= Ġbackground Children Size . height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( backdrop State . offset . value Ġ< Ġreveal Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCanvas ( Modifier . fill MaxSize ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Rect ( size Ġ= Ġsize , Ġcolor Ġ= Ġshadow Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Offset Ġ= Ġwith ( Density Ambient . current ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback drop State . offset . value . to Dp () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback drop Children ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . offset ( 0 . dp , Ġy Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. preferred Size In ( current Constraints ( constraints )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun Ġcurrent Constraints ( px Constraints : ĠConstraints ): ĠD p Constraints Ġ{ ĊĠĠĠ Ġreturn Ġwith ( Density Ambient . current ) Ġ{ ĊĠĠĠĠĠĠĠ ĠD p Constraints ( px Constraints ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġget An chors ( ĊĠĠĠ Ġsearch Children Size : ĠInt Size , ĊĠĠĠ Ġfull Height : ĠFloat Ċ ): ĠMap < Float , ĠFull Screen State > Ġ{ ĊĠĠĠ Ġval Ġmedium Value Ġ= Ġsearch Children Size . height Ġ+ Ġ 5 0 . dp . value ĊĠĠĠ Ġval ĠmaxValue Ġ= Ġfull Height Ġ- ĠAnchor Bottom Offset ĊĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠĠĠ ĠVertical Explore Padding Ġto ĠFull Screen State . Expanded , ĊĠĠĠĠĠĠĠ Ġmedium Value Ġto ĠFull Screen State . Collapsed , ĊĠĠĠĠĠĠĠ ĠmaxValue Ġto ĠFull Screen State . Min im ised ĊĠĠĠ Ġ) Ċ } Ċ Ċ private Ġconst Ġval ĠAnchor Bottom Offset Ġ= Ġ 1 3 0 f Ċ private Ġconst Ġval ĠVertical Explore Padding Ġ= Ġ 0 f Ċ private Ġconst Ġval ĠExplo re St iff ness Ġ= Ġ 1 0 0 0 f Ċ