/* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// 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 . material Ċ Ċ import Ġandroidx . compose . animation . core . Animated Value Ċ import Ġandroidx . compose . animation . core . Animation Spec Ċ import Ġandroidx . compose . animation . core . Cubic Bezier E asing Ċ import Ġandroidx . compose . animation . core . Fast Out Slow In E asing Ċ import Ġandroidx . compose . animation . core . Tween Spec Ċ import Ġandroidx . compose . foundation . Interaction Ċ import Ġandroidx . compose . ui . unit . Dp Ċ Ċ /** Ċ Ġ* ĠAnim ates Ġthe Ġ[ Dp ] Ġvalue Ġof Ġ[ this ] Ġbetween Ġ[ from ] Ġand Ġ[ to ] Ġ[ Interaction ] s , Ġto Ġ[ target ]. ĠThe Ċ Ġ* Ġ[ Animation Spec ] Ġused Ġdepends Ġon Ġthe Ġvalues Ġfor Ġ[ from ] Ġand Ġ[ to ], Ġsee Ċ Ġ* Ġ[ Elevation Constants . incoming Animation Spec For Interaction ] Ġand Ċ Ġ* Ġ[ Elevation Constants . outgoing Animation Spec For Interaction ] Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* Ġ@ param Ġfrom Ġthe Ġprevious Ġ[ Interaction ] Ġthat Ġwas Ġused Ġto Ġcalculate Ġelevation . Ġ` null ` Ġif Ġthere Ċ Ġ* Ġwas Ġno Ġprevious Ġ[ Interaction ], Ġsuch Ġas Ġwhen Ġthe Ġcomponent Ġis Ġin Ġits Ġdefault Ġstate . Ċ Ġ* Ġ@ param Ġto Ġthe Ġ[ Interaction ] Ġthat Ġthis Ġcomponent Ġis Ġmoving Ġto , Ġsuch Ġas Ġ[ Interaction . Pressed ] Ċ Ġ* Ġwhen Ġthis Ġcomponent Ġis Ġbeing Ġpressed . Ġ` null ` Ġif Ġthis Ġcomponent Ġis Ġmoving Ġback Ġto Ġits Ġdefault Ċ Ġ* Ġstate . Ċ Ġ* Ġ@ param Ġtarget Ġthe Ġ[ Dp ] Ġtarget Ġelevation Ġfor Ġthis Ġcomponent , Ġcorresponding Ġto Ġthe Ġelevation Ċ Ġ* Ġdesired Ġfor Ġthe Ġ[ to ] Ġstate . Ċ Ġ*/ Ċ fun ĠAnimated Value < Dp , Ġ* >. animate Elevation ( ĊĠĠĠ Ġfrom : ĠInteraction ? Ġ= Ġnull , ĊĠĠĠ Ġto : ĠInteraction ? Ġ= Ġnull , ĊĠĠĠ Ġtarget : ĠD p Ċ ) Ġ{ ĊĠĠĠ Ġval Ġspec Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠMoving Ġto Ġa Ġnew Ġstate ĊĠĠĠĠĠĠĠ Ġto Ġ!= Ġnull Ġ-> ĠE levation Constants . incoming Animation Spec For Interaction ( to ) ĊĠĠĠĠĠĠĠ Ġ// ĠMoving Ġto Ġdefault , Ġfrom Ġa Ġprevious Ġstate ĊĠĠĠĠĠĠĠ Ġfrom Ġ!= Ġnull Ġ-> ĠE levation Constants . outgoing Animation Spec For Interaction ( from ) ĊĠĠĠĠĠĠĠ Ġ// ĠLoading Ġthe Ġinitial Ġstate , Ġor Ġmoving Ġback Ġto Ġthe Ġbaseline Ġstate Ġfrom Ġa Ġdisabled Ġ/ ĊĠĠĠĠĠĠĠ Ġ// Ġunknown Ġstate , Ġso Ġjust Ġsnap Ġto Ġthe Ġfinal Ġvalue . ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( spec Ġ!= Ġnull ) Ġanimate To ( target , Ġspec ) Ġelse Ġsnap To ( target ) Ċ } Ċ Ċ /** Ċ Ġ* ĠContains Ġdefault Ġ[ Animation Spec ] s Ġused Ġfor Ġanim ating Ġelevation Ġbetween Ġdifferent Ġ[ Interaction ] s . Ċ Ġ* Ċ Ġ* ĠTypically Ġyou Ġshould Ġuse Ġ[ animate Elevation ] Ġinstead , Ġwhich Ġuses Ġthese Ġ[ Animation Spec ] s Ċ Ġ* Ġinternally . Ġ[ animate Elevation ] Ġin Ġturn Ġis Ġused Ġby Ġthe Ġdefaults Ġfor Ġ[ Button ] Ġand Ċ Ġ* Ġ[ Floating ActionButton ] Ġ- Ġinside Ġ[ Button Constants . animate Default Elevation ] Ġand Ċ Ġ* Ġ[ Floating ActionButton Constants . animate Default Elevation ] Ġrespectively . Ċ Ġ* Ċ Ġ* Ġ@ see Ġanimate Elevation Ċ Ġ*/ Ċ object ĠE levation Constants Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġ[ Animation Spec ] s Ġused Ġwhen Ġanim ating Ġelevation Ġto Ġ[ interaction ], Ġeither Ġfrom Ġa ĊĠĠĠĠ Ġ* Ġprevious Ġ[ Interaction ], Ġor Ġfrom Ġthe Ġdefault Ġstate . ĠIf Ġ[ interaction ] Ġis Ġunknown , Ġthen ĊĠĠĠĠ Ġ* Ġreturns Ġ` null `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġinteraction Ġthe Ġ[ Interaction ] Ġthat Ġis Ġbeing Ġanimated Ġto ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġincoming Animation Spec For Interaction ( interaction : ĠInteraction ): ĠAnimation Spec < Dp >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( interaction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInteraction . Pressed Ġ-> ĠDefault Incoming Spec ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInteraction . Drag ged Ġ-> ĠDefault Incoming Spec ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġ[ Animation Spec ] s Ġused Ġwhen Ġanim ating Ġelevation Ġaway Ġfrom Ġ[ interaction ], Ġto Ġthe ĊĠĠĠĠ Ġ* Ġdefault Ġstate . ĠIf Ġ[ interaction ] Ġis Ġunknown , Ġthen Ġreturns Ġ` null `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġinteraction Ġthe Ġ[ Interaction ] Ġthat Ġis Ġbeing Ġanimated Ġaway Ġfrom ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġoutgoing Animation Spec For Interaction ( interaction : ĠInteraction ): ĠAnimation Spec < Dp >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( interaction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInteraction . Pressed Ġ-> ĠDefault Outgoing Spec ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInteraction . Drag ged Ġ-> ĠDefault Outgoing Spec ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġuse Ġ[ Hover ed Outgoing Spec ] Ġwhen Ġhover ed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval ĠDefault Incoming Spec Ġ= ĠT ween Spec < Dp >( ĊĠĠĠ Ġduration Millis Ġ= Ġ 1 2 0 , ĊĠĠĠ Ġeasing Ġ= ĠFast Out Slow In E asing Ċ ) Ċ Ċ private Ġval ĠDefault Outgoing Spec Ġ= ĠT ween Spec < Dp >( ĊĠĠĠ Ġduration Millis Ġ= Ġ 1 5 0 , ĊĠĠĠ Ġeasing Ġ= ĠC ubic Bezier E asing ( 0 . 4 0 f , Ġ 0 . 0 0 f , Ġ 0 . 6 0 f , Ġ 1 . 0 0 f ) Ċ ) Ċ Ċ @ Suppress (" unused ") Ċ private Ġval ĠHover ed Outgoing Spec Ġ= ĠT ween Spec < Dp >( ĊĠĠĠ Ġduration Millis Ġ= Ġ 1 2 0 , ĊĠĠĠ Ġeasing Ġ= ĠC ubic Bezier E asing ( 0 . 4 0 f , Ġ 0 . 0 0 f , Ġ 0 . 6 0 f , Ġ 1 . 0 0 f ) Ċ ) Ċ