package Ġcom . se ang hay . studio example . bottom sheet Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Sp ann able StringBuilder Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . Seek Bar Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . text . bold Ċ import Ġandroidx . core . text . color Ċ import Ġandroidx . core . text . scale Ċ import Ġandroidx . core . view . forEach Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Dialog Fragment Ċ import Ġcom . se ang hay . studio . gles . shader . filter . pack . Pack Filter Ċ import Ġcom . se ang hay . studio example . R Ċ import Ġkotlinx . android . synt hetic . main . dialog _ filters .* Ċ Ċ class ĠFilter Pack Dialog Fragment Ġ: ĠBottom Sheet Dialog Fragment (), ĠSeek Bar . On Seek Bar ChangeListener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġlistener : ĠFilter Pack Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġlabel Text Views Ġ= Ġmutable Map Of < String , ĠTextView >() ĊĠĠĠ Ġprivate Ġvar Ġfilter Pack : ĠPack Filter ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġis ĠFilter Pack Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . listener Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . dialog _ filters , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpack Filter Ġ= Ġarguments ?. get Parcelable < Pack Filter >( KEY _ FILTER _ PACK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠNullPointerException (" Pack Filter Ġwas Ġnull ") ĊĠĠĠĠĠĠĠ Ġthis . filter Pack Ġ= Ġpack Filter ĊĊĠĠĠĠĠĠĠ Ġtraverse Labels ( view ) ĊĠĠĠĠĠĠĠ Ġset Values ( filter Pack ) ĊĊĠĠĠĠĠĠĠ Ġseek Bars . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġseek Bar Ġ= Ġview . findViewById < Seek Bar >( it . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar . setOn Seek Bar ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Reset Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . filter Pack Ġ= ĠPack Filter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Values ( this . filter Pack !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Save Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave And Close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave And Close () Ġ{ ĊĠĠĠĠĠĠĠ Ġlistener ?. on Filter Pack Saved ( filter Pack !!. copy ()) ĊĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġoperator Ġfun ĠButton . invoke ( cross inline Ġinvok er : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ Ġinvok er () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( p 0 : ĠSeek Bar ?, Ġp 1 : ĠInt , Ġp 2 : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( p 0 Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ(! p 2 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( seek Bar Ġin Ġseek Bars ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( seek Bar . value Ġ== Ġp 0 . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġseek Bar . key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconverter Ġ= Ġdecode Functions [ tag ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpack Filter Map [ tag ]?. set ( this . filter Pack !! , Ġconverter !! ( p 1 . toFloat ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Values ( this . filter Pack ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( p 0 : ĠSeek Bar ?) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( p 0 : ĠSeek Bar ?) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġset Values ( filter Pack : ĠPack Filter ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( filter Pack Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġseek Bars . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġseek Bar Ġ= Ġview ?. findViewById < Seek Bar >( it . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġpack Filter Map [ it . key ]?. get ( filter Pack ) Ġ?: Ġ 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconverter Ġ= Ġencode Functions [ it . key ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogress Ġ= Ġconverter !! ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseek Bar ?. progress Ġ= Ġprogress . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabel Converter Ġ= Ġlabel Functions [ it . key ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Text Views [ it . key ]?. text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrap ( labels [ it . key ] Ġ?: Ġ"", Ġlabel Converter !! ( progress ). toInt ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtraverse Labels ( view : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġis ĠViewGroup ) Ġview . forEach Ġ{ Ġtraverse Labels ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġis ĠTextView Ġ&& Ġview . tag Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view . tag Ġis ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( labels . containsKey ( view . tag Ġas ĠString )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Text Views [ view . tag Ġas ĠString ] Ġ= Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġwrap ( label : ĠString , Ġprogress : ĠInt ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSp ann able StringBuilder ( label ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" ĠâĢ¢ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. color ( Color . BLACK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale (. 8 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbold Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("$ progress % ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinterface ĠFilter Pack Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Filter Pack Saved ( filter Pack : ĠPack Filter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ FILTER _ PACK Ġ= Ġ" filter Pack " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpack Filter Map Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" brightness " Ġto ĠPack Filter :: brightness , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" contrast " Ġto ĠPack Filter :: contrast , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sat uration " Ġto ĠPack Filter :: sat uration , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" gamma " Ġto ĠPack Filter :: gamma , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" tint " Ġto ĠPack Filter :: tint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" warm th " Ġto ĠPack Filter :: warm th , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sep ia " Ġto ĠPack Filter :: sep ia , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" vi br ant " Ġto ĠPack Filter :: vi br ant , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" intensity " Ġto ĠPack Filter :: intensity ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlabels Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" brightness " Ġto Ġ" Brightness ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" contrast " Ġto Ġ" Contrast ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sat uration " Ġto Ġ" Sat uration ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" gamma " Ġto Ġ" Gamma ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" tint " Ġto Ġ" Tint ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" warm th " Ġto Ġ" W arm th ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sep ia " Ġto Ġ" Sep ia ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" vi br ant " Ġto Ġ" V ibr ant ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" intensity " Ġto Ġ" Intensity " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġseek Bars Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" brightness " Ġto ĠR . id . brightness , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" contrast " Ġto ĠR . id . contrast , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sat uration " Ġto ĠR . id . sat uration , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" gamma " Ġto ĠR . id . gamma , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" tint " Ġto ĠR . id . tint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" warm th " Ġto ĠR . id . warm th , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sep ia " Ġto ĠR . id . sep ia , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" vi br ant " Ġto ĠR . id . vi br ant , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" intensity " Ġto ĠR . id . intensity ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġencode Functions Ġ= Ġmap Of < String , Ġ(( Float ) Ġ-> ĠFloat ) >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" brightness " Ġto Ġ{ Ġvalue Ġ-> Ġ( 0 . 5 f Ġ+ Ġvalue ) Ġ* Ġ 1 0 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" contrast " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ* Ġ 5 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sat uration " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ* Ġ 5 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" gamma " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ* Ġ 5 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" tint " Ġto Ġ{ Ġvalue Ġ-> Ġ( 0 . 5 f Ġ+ Ġvalue ) Ġ* Ġ 1 0 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" warm th " Ġto Ġ{ Ġvalue Ġ-> Ġ( value Ġ+ Ġ 0 . 5 f ) Ġ* Ġ 1 0 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sep ia " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ* Ġ 1 0 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" vi br ant " Ġto Ġ{ Ġvalue Ġ-> Ġ( 0 . 5 f Ġ+ Ġvalue ) Ġ* Ġ 1 0 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" intensity " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ* Ġ 1 0 0 f Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdecode Functions Ġ= Ġmap Of < String , Ġ(( Float ) Ġ-> ĠFloat ) >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" brightness " Ġto Ġ{ Ġvalue Ġ-> Ġ( value Ġ/ Ġ 1 0 0 f ) Ġ- Ġ 0 . 5 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" contrast " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ/ Ġ 5 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sat uration " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ/ Ġ 5 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" gamma " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ/ Ġ 5 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" tint " Ġto Ġ{ Ġvalue Ġ-> Ġ( value Ġ/ Ġ 1 0 0 f ) Ġ- Ġ 0 . 5 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" warm th " Ġto Ġ{ Ġvalue Ġ-> Ġ( value Ġ/ Ġ 1 0 0 f ) Ġ- Ġ 0 . 5 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sep ia " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ/ Ġ 1 0 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" vi br ant " Ġto Ġ{ Ġvalue Ġ-> Ġ( value Ġ/ Ġ 1 0 0 f ) Ġ- Ġ 0 . 5 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" intensity " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ/ Ġ 1 0 0 f Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlabel Functions Ġ= Ġmap Of < String , Ġ(( Float ) Ġ-> ĠFloat ) >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" brightness " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ- Ġ 5 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" contrast " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ- Ġ 5 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sat uration " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ- Ġ 5 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" gamma " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ- Ġ 5 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" tint " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ- Ġ 5 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" warm th " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ- Ġ 5 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sep ia " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" vi br ant " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ- Ġ 5 0 f Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" intensity " Ġto Ġ{ Ġvalue Ġ-> Ġvalue Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( filter : ĠPack Filter ): ĠFilter Pack Dialog Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠFilter Pack Dialog Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Parcelable ( KEY _ FILTER _ PACK , Ġfilter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . arguments Ġ= Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }