package Ġeu . kan ade . t ach iy omi . util . view Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Environment Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . ViewGroup . LayoutParams . MATCH _ PARENT Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . card view . widget . Card View Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . graphics . Color Utils Ċ import Ġandroidx . core . math . Math Utils Ċ import Ġandroidx . core . net . to Uri Ċ import Ġandroidx . core . view . Window Insets Compat Ċ import Ġandroidx . core . view . Window Insets Compat . Type . ime Ċ import Ġandroidx . core . view . Window Insets Compat . Type . system Bars Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . core . view . update Padding Relative Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġcom . blue lin el abs . cond uctor . Controller Ċ import Ġcom . blue lin el abs . cond uctor . Controller Change Handler Ċ import Ġcom . blue lin el abs . cond uctor . Controller Change Type Ċ import Ġcom . blue lin el abs . cond uctor . Router Transaction Ċ import Ġeu . kan ade . t ach iy omi . R Ċ import Ġeu . kan ade . t ach iy omi . data . preference . Preferences Helper Ċ import Ġeu . kan ade . t ach iy omi . databinding . MainActivity Binding Ċ import Ġeu . kan ade . t ach iy omi . ui . base . controller . Base Controller Ċ import Ġeu . kan ade . t ach iy omi . ui . base . controller . Dialog Controller Ċ import Ġeu . kan ade . t ach iy omi . ui . base . controller . One Way Fade Change Handler Ċ import Ġeu . kan ade . t ach iy omi . ui . main . Bottom Sheet Controller Ċ import Ġeu . kan ade . t ach iy omi . ui . main . Floating Search Interface Ċ import Ġeu . kan ade . t ach iy omi . ui . main . MainActivity Ċ import Ġeu . kan ade . t ach iy omi . ui . manga . M anga Details Controller Ċ import Ġeu . kan ade . t ach iy omi . util . system . Image Util Ċ import Ġeu . kan ade . t ach iy omi . util . system . dp To Px Ċ import Ġeu . kan ade . t ach iy omi . util . system . getResource Color Ċ import Ġeu . kan ade . t ach iy omi . util . system . is Tablet Ċ import Ġeu . kan ade . t ach iy omi . util . system . material AlertDialog Ċ import Ġeu . kan ade . t ach iy omi . util . system . root Window Insets Compat Ċ import Ġeu . kan ade . t ach iy omi . util . system . toInt Ċ import Ġeu . kan ade . t ach iy omi . util . system . toast Ċ import Ġu y . ko hes ive . in jekt . inject Lazy Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . round ToInt Ċ import Ġkotlin . random . Random Ċ Ċ fun ĠController . setOn Query Text ChangeListener ( ĊĠĠĠ Ġsearch View : ĠSearch View , ĊĠĠĠ Ġonly On Submit : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġhide Kb On Submit : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġf : Ġ( text : ĠString ?) Ġ-> ĠBoolean Ċ ) Ġ{ ĊĠĠĠ Ġsearch View . setOn Query Text Listener ( ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! only On Submit Ġ&& Ġrouter . back stack . last OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . controller Ġ== Ġthis @ setOn Query Text ChangeListener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġf ( new Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( router . back stack . last OrNull ()?. controller Ġ== Ġthis @ setOn Query Text ChangeListener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hide Kb On Submit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimm Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ? ĠInput Method Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġf ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimm . hide Soft Input From Window ( search View . window Token , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġf ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun ĠController . remove Query Listener () Ġ{ ĊĠĠĠ Ġval Ġsearch View Ġ= Ġactivity Binding ?. card Toolbar ?. menu ?. find Item ( R . id . action _ search )?. action View Ġas ? ĠSearch View ĊĠĠĠ Ġval Ġsearch View 2 Ġ= Ġactivity Binding ?. toolbar ?. menu ?. find Item ( R . id . action _ search )?. action View Ġas ? ĠSearch View ĊĠĠĠ Ġsearch View ?. setOn Query Text Listener ( object Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?) Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?) Ġ= Ġtrue ĊĠĠĠ Ġ}) ĊĠĠĠ Ġsearch View 2 ?. setOn Query Text Listener ( object Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?) Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ?) Ġ= Ġtrue ĊĠĠĠ Ġ}) Ċ } Ċ Ċ fun ĠController . lift App bar With ( recycler : ĠRecyclerView , Ġpad View : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠ Ġif Ġ( pad View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġattrs Array Ġ= Ġint ArrayOf ( R . attr . main ActionBar Size ) ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġre cycler . context . obtain Styled Attributes ( attrs Array ) ĊĠĠĠĠĠĠĠ Ġvar Ġapp Bar Height Ġ= Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( toolbar Height Ġ?: Ġ 0 Ġ> Ġ 0 ) Ġtoolbar Height !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġarray . get Dimension Pixel Size ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġarray . recycle () ĊĠĠĠĠĠĠĠ Ġactivity Binding !!. toolbar . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( toolbar Height !! Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Bar Height Ġ= Ġtoolbar Height !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler . request Apply Insets () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġre cycler . update Padding Relative ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġactivity Binding !!. toolbar . y . toInt () Ġ+ Ġapp Bar Height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġre cycler . root Window Insets Compat ?. get Insets ( system Bars ()) ?. bottom Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġre cycler . apply Bottom Animated Insets ( set Padding Ġ= Ġtrue ) Ġ{ Ġview , Ġin sets Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Height Ġ= Ġin sets . get Insets ( system Bars ()). top Ġ+ Ġapp Bar Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . update Padding Relative ( top Ġ= Ġheader Height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . R ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler . do On Apply Window Insets Compat Ġ{ Ġview , Ġin sets , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Height Ġ= Ġin sets . get Insets ( system Bars ()). top Ġ+ Ġapp Bar Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . update Padding Relative ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġheader Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġin sets . get Insets ( ime () Ġor Ġsystem Bars ()). bottom ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġview ?. apply Window Insets For Controller () ĊĠĠĠĠĠĠĠ Ġre cycler . setOn Apply Window Insets Listener ( Recycler Window Insets Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġtoolbar Color Anim : ĠValue Animator ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġis Toolbar Colo red Ġ= Ġfalse ĊĊĠĠĠ Ġval Ġcolor Toolbar : Ġ( Boolean ) Ġ-> ĠUnit Ġ= Ġf @{ Ġis Colo red Ġ-> ĊĠĠĠĠĠĠĠ Ġis Toolbar Colo red Ġ= Ġis Colo red ĊĠĠĠĠĠĠĠ Ġtoolbar Color Anim ?. cancel () ĊĠĠĠĠĠĠĠ Ġval Ġfloating Bar Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ!( activity Binding ?. toolbar ?. isVisible Ġ== Ġtrue Ġ|| Ġactivity Binding ?. tabs Frame Layout ?. isVisible Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= ĠImage Util . get Percent Of Color ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Binding !!. app Bar . backgroundColor Ġ?: ĠColor . TRANSP ARENT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity !!. getResource Color ( R . attr . color Surface ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity !!. getResource Color ( R . attr . color Primary Variant ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( floating Bar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset AppBar BG ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtoolbar Color Anim Ġ= ĠValue Animator . of Float ( percent , Ġis Colo red . toInt (). toFloat ()) ĊĠĠĠĠĠĠĠ Ġtoolbar Color Anim ?. add Update Listener Ġ{ Ġvalue Animator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset AppBar BG ( value Animator . animated Value Ġas ĠFloat ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtoolbar Color Anim ?. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfloating Bar Ġ= ĊĠĠĠĠĠĠĠ Ġ!( activity Binding ?. toolbar ?. isVisible Ġ== Ġtrue Ġ|| Ġactivity Binding ?. tabs Frame Layout ?. isVisible Ġ== Ġtrue ) ĊĠĠĠ Ġif Ġ( floating Bar ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset AppBar BG ( 0 f ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcolor Toolbar ( recycler . can Scroll Vert ically (- 1 )) ĊĠĠĠ Ġre cycler . add On Scroll Listener ( ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( re cyclerView , Ġdx , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( router ?. back stack ?. last OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . controller Ġ== Ġthis @ lift App bar With Ġ&& Ġactivity Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnot At Top Ġ= Ġre cycler . can Scroll Vert ically (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( not At Top Ġ!= Ġis Toolbar Colo red ) Ġcolor Toolbar ( not At Top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun ĠController . scroll View With ( ĊĠĠĠ Ġre cycler : ĠRecyclerView , ĊĠĠĠ Ġpad Bottom : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġcustom Padding : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġswipe Refresh Layout : ĠSw ipe Refresh Layout ? Ġ= Ġnull , ĊĠĠĠ Ġafter Insets : Ġ(( Window Insets Compat ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġlift On Scroll : Ġ(( Boolean ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġon Le aving Controller : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġon Bottom Nav Update : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġinclude Tab View : ĠBoolean Ġ= Ġfalse Ċ ): Ġ(( Boolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġvar Ġstatus Bar Height Ġ= Ġ- 1 ĊĠĠĠ Ġval Ġtab Bar Height Ġ= Ġ 4 8 . dp To Px ĊĠĠĠ Ġactivity Binding ?. app Bar ?. y Ġ= Ġ 0 f ĊĠĠĠ Ġval Ġattrs Array Ġ= Ġint ArrayOf ( R . attr . main ActionBar Size ) ĊĠĠĠ Ġval Ġarray Ġ= Ġre cycler . context . obtain Styled Attributes ( attrs Array ) ĊĠĠĠ Ġvar Ġapp Bar Height Ġ= Ġ( ĊĠĠĠĠĠĠĠ Ġif Ġ( toolbar Height Ġ?: Ġ 0 Ġ> Ġ 0 ) Ġtoolbar Height !! ĊĠĠĠĠĠĠĠ Ġelse Ġarray . get Dimension Pixel Size ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ) Ġ+ Ġif Ġ( include Tab View ) Ġtab Bar Height Ġelse Ġ 0 ĊĠĠĠ Ġarray . recycle () ĊĠĠĠ Ġswipe Refresh Layout ?. set Distance To Trigger Sync ( 1 5 0 . dp To Px ) ĊĠĠĠ Ġactivity Binding !!. toolbar . post Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( toolbar Height !! Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Bar Height Ġ= Ġtoolbar Height !! Ġ+ Ġif Ġ( include Tab View ) Ġtab Bar Height Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler . request Apply Insets () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġupdate Views Near Bottom Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġon Bottom Nav Update ?. invoke () ĊĠĠĠĠĠĠĠ Ġactivity Binding ?. bottom View ?. translation Y Ġ= Ġactivity Binding ?. bottom Nav ?. translation Y Ġ?: Ġ 0 f ĊĠĠĠ Ġ} ĊĠĠĠ Ġre cycler . post Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Views Near Bottom () ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġrandom Tag Ġ= ĠRandom . next Long () ĊĠĠĠ Ġvar Ġlast Y Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġfake Toolbar View : ĠView ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġfake Bottom Nav View : ĠView ? Ġ= Ġnull ĊĠĠĠ Ġif Ġ(! custom Padding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cycler . update Padding Relative ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. window ?. decor View ?. root Window Insets Compat ?. get Insets ( system Bars ()) ?. top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ+ Ġapp Bar Height ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġre cycler . do On Apply Window Insets Compat Ġ{ Ġview , Ġin sets , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġheader Height Ġ= Ġin sets . get Insets ( system Bars ()). top Ġ+ Ġapp Bar Height ĊĠĠĠĠĠĠĠ Ġif Ġ(! custom Padding ) Ġview . update Padding Relative ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġheader Height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġif Ġ( pad Bottom ) Ġin sets . get Insets ( system Bars ()). bottom Ġelse Ġview . padding Bottom ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġswipe Refresh Layout ?. set Progress View Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Height Ġ+ Ġ(- 6 0 ). dp To Px , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Height Ġ+ Ġ 1 0 . dp To Px ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġstatus Bar Height Ġ= Ġin sets . get Insets ( system Bars ()). top ĊĠĠĠĠĠĠĠ Ġafter Insets ?. invoke ( in sets ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġtoolbar Color Anim : ĠValue Animator ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġis Toolbar Color Ġ= Ġfalse ĊĠĠĠ Ġvar ĠisIn View Ġ= Ġtrue ĊĠĠĠ Ġval Ġpreferences : ĠPreferences Helper Ġby Ġinject Lazy () ĊĠĠĠ Ġval Ġcolor Toolbar : Ġ( Boolean ) Ġ-> ĠUnit Ġ= Ġf @{ Ġis Colo red Ġ-> ĊĠĠĠĠĠĠĠ Ġis Toolbar Color Ġ= Ġis Colo red ĊĠĠĠĠĠĠĠ Ġif Ġ( lift On Scroll Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlift On Scroll . invoke ( is Colo red ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Color Anim ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfloating Bar Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this Ġas ? ĠFloating Search Interface )?. show Floating Bar () Ġ== Ġtrue Ġ&& Ġ! include Tab View ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( floating Bar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset AppBar BG ( 0 f , Ġinclude Tab View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= ĠImage Util . get Percent Of Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Binding !!. app Bar . backgroundColor Ġ?: ĠColor . TRANSP ARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity !!. getResource Color ( R . attr . color Surface ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity !!. getResource Color ( R . attr . color Primary Variant ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Color Anim Ġ= ĠValue Animator . of Float ( percent , Ġis Colo red . toInt (). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Color Anim ?. add Update Listener Ġ{ Ġvalue Animator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset AppBar BG ( value Animator . animated Value Ġas ĠFloat , Ġinclude Tab View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Color Anim ?. start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ(( this Ġas ? ĠFloating Search Interface )?. show Floating Bar () Ġ== Ġtrue Ġ&& Ġ! include Tab View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset AppBar BG ( 0 f , Ġinclude Tab View ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġadd Lifecycle Listener ( ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠController . Lifecycle Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChange Start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontroller : ĠController , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Handler : ĠController Change Handler , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Type : ĠController Change Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . onChange Start ( controller , Ġchange Handler , Ġchange Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisIn View Ġ= Ġchange Type . is Enter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( change Type . is Enter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Toolbar ( is Toolbar Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fake Toolbar View ?. parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġfake Toolbar View ?. parent Ġas ? ĠViewGroup Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . remove View ( fake Toolbar View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfake Toolbar View Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fake Bottom Nav View ?. parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġfake Bottom Nav View ?. parent Ġas ? ĠViewGroup Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . remove View ( fake Bottom Nav View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfake Bottom Nav View Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Binding !!. toolbar . tag Ġ= Ġrandom Tag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Binding !!. toolbar . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( this @ scroll View With Ġas ? ĠBottom Sheet Controller )?. sheet Is Fullscreen () Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler . smooth Scroll To Top () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this @ scroll View With Ġas ? ĠBottom Sheet Controller )?. toggle Sheet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! custom Padding Ġ&& Ġlast Y Ġ== Ġ 0 f Ġ&& Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ scroll View With Ġ! is ĠFloating Search Interface Ġ&& Ġrouter . back stack . last OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . controller Ġis ĠM anga Details Controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ|| Ġinclude Tab View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġre cycler . parent Ġas ? ĠViewGroup Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠView ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfake Toolbar View Ġ= Ġv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . addView ( v , Ġparent . indexOf Child ( recycler ) Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġfake Toolbar View ?. layout Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams ?. height Ġ= Ġre cycler . padding Top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams ?. width Ġ= ĠMATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . set BackgroundColor ( v . context . getResource Color ( R . attr . color Surface )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Le aving Controller ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! custom Padding Ġ&& Ġrouter . back stack Size Ġ== Ġ 2 Ġ&& Ġchange Type Ġ== ĠController Change Type . PUSH _ EXIT Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . back stack . last OrNull ()?. controller Ġ! is ĠDialog Controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġre cycler . parent Ġas ? ĠViewGroup Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Nav Ġ= Ġactivity Binding ?. bottom Nav Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠView ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfake Bottom Nav View Ġ= Ġv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . addView ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġfake Bottom Nav View ?. layout Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams ?. height Ġ= Ġbottom Nav . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( params Ġas ? ĠFrame Layout . LayoutParams )?. gravity Ġ= ĠGr avity . BOTTOM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfake Bottom Nav View ?. translation Y Ġ= Ġbottom Nav . translation Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams ?. width Ġ= ĠMATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . set BackgroundColor ( v . context . getResource Color ( R . attr . color Primary Variant )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Color Anim ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Binding !!. toolbar . tag Ġ== Ġrandom Tag ) Ġactivity Binding !!. toolbar . setOnClickListener ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠĠĠ Ġcolor Toolbar ( recycler . can Scroll Vert ically (- 1 )) ĊĊĠĠĠ Ġre cycler . post Ġ{ ĊĠĠĠĠĠĠĠ Ġcolor Toolbar ( recycler . can Scroll Vert ically (- 1 )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġis Tablet Ġ= Ġre cycler . context . is Tablet () Ġ&& Ġre cycler . context . resources . configuration ?. orientation Ġ== ĠConfiguration . OR IENTATION _ LAND SC APE ĊĠĠĠ Ġre cycler . add On Scroll Listener ( ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( re cyclerView , Ġdx , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( router ?. back stack ?. last OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . controller Ġ== Ġthis @ scroll View With Ġ&& Ġstatus Bar Height Ġ> Ġ- 1 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this @ scroll View With Ġas ? ĠBaseController <* >) ?. is Dragging Ġ!= Ġtrue Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġ!= Ġnull Ġ&& Ġactivity Binding !!. app Bar . height Ġ> Ġ 0 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler . translation Y Ġ== Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! recycler . can Scroll Vert ically (- 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshort Animation Duration Ġ= Ġresources ?. getInteger ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . integer . config _ short Anim Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Binding !!. app Bar . animate (). y ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( short Animation Duration . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( router . back stack Size Ġ== Ġ 1 Ġ&& ĠisIn View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Binding !!. bottom Nav ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim ator Ġ= Ġit . animate ()?. translation Y ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . set Duration ( short Animation Duration . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator ?. set Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Views Near Bottom () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Toolbar Color ) Ġcolor Toolbar ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Tablet ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Binding !!. app Bar . y Ġ-= Ġdy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Binding !!. app Bar . y Ġ= ĠMath Utils . clamp ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Binding !!. app Bar . y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- activity Binding !!. app Bar . height . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Binding !!. bottom Nav ?. let Ġ{ Ġbottom Nav Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bottom Nav . isVisible Ġ&& ĠisIn View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( preferences . hide Bottom Nav On Scroll (). get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Nav . translation Y Ġ+= Ġdy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Nav . translation Y Ġ= ĠMath Utils . clamp ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Nav . translation Y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Nav . height . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Views Near Bottom () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( bottom Nav . translation Y Ġ!= Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Nav . translation Y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Binding !!. bottom View ?. translation Y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Toolbar Color Ġ&& Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdy Ġ== Ġ 0 Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Binding !!. app Bar . y Ġ<= Ġ- activity Binding !!. app Bar . height . toFloat () Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdy Ġ== Ġ 0 Ġ&& Ġactivity Binding !!. app Bar . y Ġ== Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Toolbar ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnot At Top Ġ= Ġre cycler . can Scroll Vert ically (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( not At Top Ġ!= Ġis Toolbar Color ) Ġcolor Toolbar ( not At Top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Y Ġ= Ġactivity Binding !!. app Bar . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scroll StateChanged ( re cyclerView : ĠRecyclerView , ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Scroll StateChanged ( re cyclerView , ĠnewState ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState Ġ== ĠRecyclerView . SCROLL _ STATE _ IDLE Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this @ scroll View With Ġas ? ĠBaseController <* >) ?. is Dragging Ġ!= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Tablet ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( router ?. back stack ?. last OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . controller Ġ== Ġthis @ scroll View With Ġ&& Ġstatus Bar Height Ġ> Ġ- 1 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġ!= Ġnull Ġ&& Ġactivity Binding !!. app Bar . height Ġ> Ġ 0 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler . translation Y Ġ== Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhalf Way Ġ= Ġactivity Binding !!. app Bar . height . toFloat () Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshort Animation Duration Ġ= Ġresources ?. getInteger ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . integer . config _ short Anim Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcloser To Top Ġ= Ġabs ( activity Binding !!. app Bar . y ) Ġ> Ġhalf Way ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhalf Way Bottom Ġ= Ġ( activity Binding !!. bottom Nav ?. height ?. toFloat () Ġ?: Ġ 0 f ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcloser To Bottom Ġ= Ġactivity Binding !!. bottom Nav ?. translation Y Ġ?: Ġ 0 f Ġ> Ġhalf Way Bottom ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġat Top Ġ= Ġ! recycler . can Scroll Vert ically (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcloser To Edge Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Binding !!. bottom Nav ?. isVisible Ġ== Ġtrue Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . hide Bottom Nav On Scroll (). get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġcloser To Bottom Ġelse Ġcloser To Top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Y Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( clo ser To Edge Ġ&& Ġ! at Top ) Ġ(- activity Binding !!. app Bar . height . toFloat ()) Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Binding !!. app Bar . animate (). y ( last Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( short Animation Duration . to Long ()). start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Binding !!. bottom Nav ?. isVisible Ġ== Ġtrue Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisIn View Ġ&& Ġpreferences . hide Bottom Nav On Scroll (). get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Binding !!. bottom Nav ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Bottom Y Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( clo ser To Edge Ġ&& Ġ! at Top ) Ġit . height . toFloat () Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim ator Ġ= Ġit . animate ()?. translation Y ( last Bottom Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . set Duration ( short Animation Duration . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator ?. set Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Views Near Bottom () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recycler . can Scroll Vert ically (- 1 ) Ġ&& Ġ! is Toolbar Color ) Ġcolor Toolbar ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ(! recycler . can Scroll Vert ically (- 1 ) Ġ&& Ġis Toolbar Color ) Ġcolor Toolbar ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( newState Ġ== ĠRecyclerView . SCROLL _ STATE _ DR AG GING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġactivity ?. window ?. current Focus Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimm Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ? ĠInput Method Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimm . hide Soft Input From Window ( view . window Token , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠĠĠ Ġreturn Ġcolor Toolbar Ċ } Ċ Ċ fun ĠController . set AppBar BG ( value : ĠFloat , Ġinclude Tab View : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠ Ġval Ġcontext Ġ= Ġview ?. context Ġ?: Ġreturn ĊĠĠĠ Ġval Ġfloating Bar Ġ= ĊĠĠĠĠĠĠĠ Ġ( this Ġas ? ĠFloating Search Interface )?. show Floating Bar () Ġ== Ġtrue Ġ&& Ġ! include Tab View ĊĠĠĠ Ġif Ġ(( this Ġas ? ĠBottom Sheet Controller )?. sheet Is Fullscreen () Ġ== Ġtrue ) Ġreturn ĊĠĠĠ Ġif Ġ( router . back stack . last OrNull ()?. controller Ġ!= Ġthis ) Ġreturn ĊĠĠĠ Ġif Ġ( floating Bar ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( activity Binding ?. card View Ġas ? ĠCard View )?. set Card BackgroundColor ( context . getResource Color ( R . attr . color Primary Variant )) ĊĠĠĠĠĠĠĠ Ġactivity Binding ?. app Bar ?. set BackgroundColor ( Color . TRANSP ARENT ) ĊĠĠĠĠĠĠĠ Ġactivity ?. window ?. status Bar Color Ġ= Ġcontext . getResource Color ( android . R . attr . status Bar Color ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠColor Utils . blend ARGB ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getResource Color ( R . attr . color Surface ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getResource Color ( R . attr . color Primary Variant ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġactivity Binding ?. app Bar ?. set BackgroundColor ( color ) ĊĠĠĠĠĠĠĠ Ġactivity ?. window ?. status Bar Color Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor Utils . set Alpha Component ( color , Ġ( 0 . 8 7 f Ġ* Ġ 2 5 5 ). round ToInt ()) ĊĠĠĠĠĠĠĠ Ġif Ġ(( this Ġas ? ĠFloating Search Interface )?. show Floating Bar () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinv Color Ġ= ĠColor Utils . blend ARGB ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getResource Color ( R . attr . color Surface ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getResource Color ( R . attr . color Primary Variant ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ- Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Binding ?. card View Ġas ? ĠCard View )?. set Card BackgroundColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor State List . valueOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinv Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠController . request File Permissions Safe ( ĊĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠ Ġpreferences : ĠPreferences Helper , ĊĠĠĠ Ġshow A 1 1 Permission Any way : ĠBoolean Ġ= Ġfalse Ċ ) Ġ{ ĊĠĠĠ Ġval Ġactivity Ġ= Ġactivity Ġ?: Ġreturn ĊĠĠĠ Ġval Ġpermissions Ġ= Ġmutable ListOf ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠ Ġpermissions . forEach Ġ{ Ġpermission Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( permission ), Ġrequest Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( ĊĠĠĠĠĠĠĠ ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . R Ġ&& ĊĠĠĠĠĠĠĠ Ġ! Environment . is External Storage Manager () Ġ&& ĊĠĠĠĠĠĠĠ Ġ(! preferences . has Denied A 1 1 File Permission (). get () Ġ|| Ġshow A 1 1 Permission Any way ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpreferences . has Denied A 1 1 File Permission (). set ( true ) ĊĠĠĠĠĠĠĠ Ġactivity . material AlertDialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . all _ files _ permission _ required ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( R . string . external _ storage _ permission _ notice ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . ACTION _ MANAGE _ APP _ ALL _ FILES _ ACCESS _ PERMISSION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" package :${ activity . packageName }". to Uri () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ(_ : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent 2 Ġ= ĠIntent ( Settings . ACTION _ MANAGE _ ALL _ FILES _ ACCESS _ PERMISSION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity ( intent 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( android . R . string . cancel , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠController . with Fade Transaction (): ĠRouter Transaction Ġ{ ĊĠĠĠ Ġreturn ĠRouter Transaction . with ( this ) ĊĠĠĠĠĠĠĠ Ġ. push Change Handler ( One Way Fade Change Handler ()) ĊĠĠĠĠĠĠĠ Ġ. pop Change Handler ( One Way Fade Change Handler ()) Ċ } Ċ Ċ fun ĠController . open In Browser ( url : ĠString ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW , Ġurl . to Uri ()) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity ?. toast ( e . message ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠController . activity Binding : ĠMainActivity Binding ? ĊĠĠĠ Ġget () Ġ= Ġ( activity Ġas ? ĠMainActivity )?. binding Ċ Ċ val ĠController . toolbar Height : ĠInt ? ĊĠĠĠ Ġget () Ġ= Ġ( activity Ġas ? ĠMainActivity )?. toolbar Height Ċ