/* Ċ Ġ* ĠCopyright Ġ 2 0 2 2 Ġ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 Ġcom . google . android . hor o log ist . compose . nav scaffold Ċ Ċ import Ġandroidx . compose . foundation . Scroll State Ċ import Ġandroidx . compose . foundation . gest ures . Scroll able State Ċ import Ġandroidx . compose . foundation . lazy . Lazy List State Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . focus . Focus Request er Ċ import Ġandroidx . lifecycle . Saved State Handle Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . navigation . Nav Graph Builder Ċ import Ġandroidx . navigation . Nav Host Controller Ċ import Ġandroidx . we ar . compose . material . Position Indicator Ċ import Ġandroidx . we ar . compose . material . Sca ffold Ċ import Ġandroidx . we ar . compose . material . Scaling Lazy List State Ċ import Ġandroidx . we ar . compose . material . Time Text Ċ import Ġandroidx . we ar . compose . material . V ign ette Ċ import Ġandroidx . we ar . compose . material . V ign ette Position Ċ import Ġcom . google . android . hor o log ist . compose . nav scaffold . Nav Sca ffold ViewModel . V ign ette Mode . Off Ċ import Ġcom . google . android . hor o log ist . compose . nav scaffold . Nav Sca ffold ViewModel . V ign ette Mode . On Ċ import Ġcom . google . android . hor o log ist . compose . nav scaffold . Nav Sca ffold ViewModel . V ign ette Mode . When Scroll able Ċ import Ġcom . google . android . hor o log ist . compose . nav scaffold . util . save able Ċ Ċ /** Ċ Ġ* ĠA ĠViewModel Ġthat Ġback s Ġthe ĠW ear Nav Sca ffold Ġto Ġallow Ġeach Ġcomp osable Ġto Ġinteract Ġand Ġeffect Ċ Ġ* Ġthe Ġ[ Sca ffold ] Ġposition Indicator , Ġv ign ette Ġand Ġtime Text . Ċ Ġ* Ċ Ġ* ĠA ĠViewModel Ġis Ġused Ġto Ġallow Ġthe Ġsame Ġcurrent Ġinstance Ġto Ġbe Ġshared Ġbetween Ġthe ĠW ear Nav Sca ffold Ċ Ġ* Ġand Ġthe Ġcomp osable Ġscreen Ġvia Ġ[ Nav Host Controller . current Back Stack Entry ]. Ċ Ġ*/ Ċ public Ġopen Ġclass ĠNav Sca ffold ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġsaved State Handle : ĠSaved State Handle Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġinternal Ġvar Ġinitial Index : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġscroll Type Ġby Ġmutable State Of < Scroll Type ? >( null ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ scroll able State : ĠScroll able State ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġscroll able Ġstate Ġfor Ġthis Ġcomp osable Ġor Ġnull Ġif Ġthe Ġscaffold Ġshould ĊĠĠĠĠ Ġ* Ġnot Ġconsider Ġthis Ġelement Ġto Ġbe Ġscroll able . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġval Ġscroll able State : ĠScroll able State ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( scroll Type Ġ== Ġnull Ġ|| Ġscroll Type Ġ== ĠScroll Type . None ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ scroll able State ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġconfiguration Ġof Ġ[ V ign ette ], Ġ[ When Scroll able ], Ġ[ Off ], Ġ[ On ] Ġand Ġif Ġso Ġwhether Ġtop Ġand ĊĠĠĠĠ Ġ* Ġbottom . ĠDefaults Ġto Ġon Ġfor Ġscroll able Ġscreens . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġv ign ette Position : ĠV ign ette Mode Ġby Ġmutable State Of ( V ign ette Mode . When Scroll able ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġconfiguration Ġof Ġ[ Time Text ], Ġdefaults Ġto ĠF ade Away Ġwhich Ġwill Ġmove Ġthe Ġtime Ġtext Ġabove Ġthe ĊĠĠĠĠ Ġ* Ġscreen Ġto Ġavoid Ġoverlapping Ġwith Ġthe Ġcontent Ġmoving Ġup . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġtime Text Mode : ĠTime Text Mode Ġby Ġmutable State Of ( Time Text Mode . Fade Away ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġconfiguration Ġof Ġ[ Position Indicator ]. Ġ ĠThe Ġdefault Ġis Ġto Ġshow Ġa Ġscroll Ġbar Ġwhile Ġthe ĊĠĠĠĠ Ġ* Ġscroll Ġis Ġin Ġprogress . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġposition Indicator Mode : ĠPosition Indicator Mode ĊĠĠĠĠĠĠĠ Ġby Ġmutable State Of ( Position Indicator Mode . On ) ĊĊĠĠĠ Ġinternal Ġvar Ġfocus Requested : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġ[ Focus Request er ] Ġto Ġbe Ġpassed Ġinto ĠScroll able Ġcomp os ables . ĊĠĠĠĠ Ġ* ĠIf Ġthis Ġis Ġaccessed Ġwithin Ġ[ Nav Graph Builder . comp osable ] Ġthen ĊĠĠĠĠ Ġ* Ġit Ġis Ġconsidered Ġactive Ġand Ġw ired Ġup Ġto Ġscreen Ġchanges . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġval Ġfocus Request er : ĠFocus Request er Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġfocus Requested Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠFocus Request er () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġinitialize Scroll State ( scroll State Builder : Ġ() Ġ-> ĠScroll State ): ĠScroll State Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( scroll Type Ġ== Ġnull Ġ|| Ġscroll Type Ġ== ĠScroll Type . Scroll State ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( scroll Type Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Type Ġ= ĠScroll Type . Scroll State ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ scroll able State Ġ= Ġsaved State Handle . save able ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġ" nav Sca ffold . Scroll State ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsa ver Ġ= ĠScroll State . Saver ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll State Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ_ scroll able State Ġas ĠScroll State ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġinitialize Scaling Lazy List State ( ĊĠĠĠĠĠĠĠ Ġscroll able State Builder : Ġ() Ġ-> ĠScaling Lazy List State ĊĠĠĠ Ġ): ĠScaling Lazy List State Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( scroll Type Ġ== Ġnull Ġ|| Ġscroll Type Ġ== ĠScroll Type . Scaling Lazy Column ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( scroll Type Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Type Ġ= ĠScroll Type . Scaling Lazy Column ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ scroll able State Ġ= Ġsaved State Handle . save able ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġ" nav Sca ffold . Scaling Lazy List State ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsa ver Ġ= ĠScaling Lazy List State . Saver ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll able State Builder (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Index Ġ= Ġit . center Item Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ_ scroll able State Ġas ĠScaling Lazy List State ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġinitialize Lazy List ( ĊĠĠĠĠĠĠĠ Ġscroll able State Builder : Ġ() Ġ-> ĠLazy List State ĊĠĠĠ Ġ): ĠLazy List State Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( scroll Type Ġ== Ġnull Ġ|| Ġscroll Type Ġ== ĠScroll Type . Lazy List ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( scroll Type Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Type Ġ= ĠScroll Type . Lazy List ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ scroll able State Ġ= Ġsaved State Handle . save able ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġ" nav Sca ffold . Lazy List State ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsa ver Ġ= ĠLazy List State . Saver ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll able State Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ_ scroll able State Ġas ĠLazy List State ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġenum Ġclass ĠScroll Type Ġ{ ĊĠĠĠĠĠĠĠ ĠNone , ĠScaling Lazy Column , ĠScroll State , ĠLazy List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġconfiguration Ġof Ġ[ Time Text ], Ġdefaults Ġto ĠF ade Away Ġwhich Ġwill Ġmove Ġthe Ġtime Ġtext Ġabove Ġthe ĊĠĠĠĠ Ġ* Ġscreen Ġto Ġavoid Ġoverlapping Ġwith Ġthe Ġcontent Ġmoving Ġup . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġenum Ġclass ĠTime Text Mode Ġ{ ĊĠĠĠĠĠĠĠ ĠOn , ĠOff , ĠF ade Away ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġconfiguration Ġof Ġ[ Position Indicator ]. Ġ ĠThe Ġdefault Ġis Ġto Ġshow Ġa Ġscroll Ġbar Ġwhile Ġthe ĊĠĠĠĠ Ġ* Ġscroll Ġis Ġin Ġprogress . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġenum Ġclass ĠPosition Indicator Mode Ġ{ ĊĠĠĠĠĠĠĠ ĠOn , ĠOff ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġconfiguration Ġof Ġ[ V ign ette ], Ġ[ When Scroll able ], Ġ[ Off ], Ġ[ On ] Ġand Ġif Ġso Ġwhether Ġtop Ġand ĊĠĠĠĠ Ġ* Ġbottom . ĠDefaults Ġto Ġon Ġfor Ġscroll able Ġscreens . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġsealed Ġinterface ĠV ign ette Mode Ġ{ ĊĠĠĠĠĠĠĠ Ġpublic Ġobject ĠWhen Scroll able Ġ: ĠV ign ette Mode ĊĠĠĠĠĠĠĠ Ġpublic Ġobject ĠOff Ġ: ĠV ign ette Mode ĊĠĠĠĠĠĠĠ Ġpublic Ġdata Ġclass ĠOn ( val Ġposition : ĠV ign ette Position ) Ġ: ĠV ign ette Mode ĊĠĠĠ Ġ} Ċ } Ċ