package Ġpress . theme Ċ Ċ import Ġandroid . R . attr . state _ checked Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Port er D uff . Mode . SRC _ AT OP Ċ import Ġandroid . graphics . Port er D uff . Mode . SRC _ IN Ċ import Ġandroid . graphics . Port er D uff Color Filter Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . Window . ID _ ANDROID _ CONTENT Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . CheckBox Ċ import Ġandroid . widget . Compound Button Ċ import Ġandroid . widget . Edge Effect Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . Horizontal ScrollView Ċ import Ġandroid . widget . Image Button Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . ScrollView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . widget . Action Menu View Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . core . view . children Ċ import Ġandroidx . core . widget . Nested ScrollView Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . RecyclerView . Edge Effect Factory Ċ import Ġcom . google . android . material . floating action button . Floating ActionButton Ċ import Ġcom . google . android . material . switch material . Switch Material Ċ import Ġme . s aket . press . R Ċ import Ġme . s aket . press . shared . theme . Text Styles . app Title Ċ import Ġme . s aket . press . shared . theme . apply Style Ċ import Ġme . s aket . press . shared . theme . blend With Ċ import Ġme . s aket . press . shared . theme . with Alpha Ċ import Ġpress . extensions . border less R ipple Drawable Ċ import Ġpress . extensions . find Title View Ċ import Ġpress . extensions . on View Adds Ċ import Ġpress . extensions . textColor Ċ import Ġpress . widgets . Press Button Ċ import Ġpress . widgets . ScrollView Compat Ċ import Ġpress . widgets . color State ListOf Ċ import Ġpress . widgets . dp Ċ Ċ /** Ċ Ġ* ĠRegisters Ġtheme Ġchange Ġlisteners Ġon Ġeach ĠViews Ġof Ġa ĠView Ġhierarchy Ġso Ċ Ġ* Ġthat Ġthe Ġapp 's Ġtheme Ġcan Ġchange Ġwithout Ġrequiring Ġa Ġrestart . Ċ Ġ*/ Ċ object ĠAuto The mer Ġ{ ĊĠ Ġfun Ġtheme ( activity : ĠActivity ) Ġ{ ĊĠĠĠ Ġtheme Group ( activity . findViewById ( ID _ ANDROID _ CONTENT )) ĊĠ Ġ} ĊĊĠ Ġfun Ġtheme Group ( view Group : ĠViewGroup ) Ġ{ ĊĠĠĠ Ġview Group . on View Adds Ġ{ Ġchild Ġ-> ĊĠĠĠĠĠ Ġwhen Ġ( child ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠViewGroup Ġ-> Ġtheme Group ( child ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtheme View ( child ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtheme View ( view Group ) ĊĠĠĠ Ġview Group . children . forEach Ġ{ Ġchild Ġ-> ĊĠĠĠĠĠ Ġwhen Ġ( child ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠViewGroup Ġ-> Ġtheme Group ( child ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtheme View ( child ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtheme View ( view : ĠView ) Ġ{ ĊĠĠĠ Ġ// ĠViews Ġcan Ġget Ġre cyc led . ĠAvoid Ġthem ing Ġthem Ġagain . ĊĠĠĠ Ġif Ġ( view . getTag ( R . id . the ming _ done ) Ġas ? ĠBoolean Ġ== Ġtrue ) Ġreturn ĊĠĠĠ Ġview . setTag ( R . id . the ming _ done , Ġtrue ) ĊĊĠĠĠ Ġwhen Ġ( view ) Ġ{ ĊĠĠĠĠĠ Ġis ĠEditText Ġ-> Ġthe med ( view ) ĊĠĠĠĠĠ Ġis ĠCheckBox Ġ-> Ġthe med ( view ) ĊĠĠĠĠĠ Ġis ĠSwitch Material Ġ-> Ġthe med ( view ) ĊĠĠĠĠĠ Ġis ĠButton Ġ-> Ġthe med ( view ) ĊĠĠĠĠĠ Ġis ĠTextView Ġ-> Ġthe med ( view ) ĊĠĠĠĠĠ Ġis ĠScroll View Ġ-> Ġthe med ( view ) ĊĠĠĠĠĠ Ġis ĠNested ScrollView Ġ-> Ġthe med ( view ) ĊĠĠĠĠĠ Ġis ĠHorizontal ScrollView Ġ-> Ġthe med ( view ) ĊĠĠĠĠĠ Ġis ĠRecyclerView Ġ-> Ġthe med ( view ) ĊĠĠĠĠĠ Ġis ĠToolbar Ġ-> Ġthe med ( view ) ĊĠĠĠĠĠ Ġis ĠFloating ActionButton Ġ-> Ġthe med ( view ) ĊĠĠĠĠĠ Ġis ĠProgress Bar Ġ-> Ġthe med ( view ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġ< T Ġ: ĠTextView > Ġthe med ( view : ĠT ): ĠT Ġ= Ġview . apply Ġ{ ĊĠ Ġval Ġselection Handle Draw ables Ġ= ĠTextView Compat . text Selection Handles ( this ) ĊĊĠ Ġtheme Aware Ġ{ Ġpalette Ġ-> ĊĠĠĠ Ġhighlight Color Ġ= Ġpalette . text Highlight Color ĊĠĠĠ Ġselection Handle Draw ables . forEach Ġ{ Ġit . setColor Filter ( palette . accent Color , ĠSRC _ IN ) Ġ} ĊĠĠĠ Ġset Link TextColor ( palette . accent Color ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġ< T Ġ: ĠButton > Ġthe med ( view : ĠT ): ĠT Ġ= Ġview . apply Ġ{ ĊĠ Ġcheck ( view Ġis ĠPress Button Ġ|| Ġview Ġis ĠCompound Button ) Ġ{ Ġ" Use ĠPress Button Ġinstead " Ġ} Ċ } Ċ Ċ private Ġfun Ġ< T Ġ: ĠEditText > Ġthe med ( view : ĠT ): ĠT Ġ= Ġview . apply Ġ{ ĊĠ Ġthe med ( view Ġas ĠTextView ) ĊĊĠ Ġtheme Aware Ġ{ Ġpalette Ġ-> ĊĠĠĠ Ġset Hint TextColor ( palette . textColor Secondary ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġ< T Ġ: ĠCheckBox > Ġthe med ( view : ĠT ): ĠT Ġ= Ġview . apply Ġ{ ĊĠ Ġtheme Aware Ġ{ ĊĠĠĠ Ġbackground Ġ= Ġborder less R ipple Drawable ( it ) ĊĠĠĠ Ġbutton Tint List Ġ= ĠColor State List . valueOf ( it . accent Color ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġ< T Ġ: ĠSwitch Material > Ġthe med ( view : ĠT ): ĠT Ġ= Ġview . apply Ġ{ ĊĠ Ġtheme Aware Ġ{ ĊĠĠĠ Ġthumb Tint List Ġ= Ġcolor State ListOf ( ĊĠĠĠĠĠ Ġint ArrayOf ( state _ checked ) Ġto Ġit . accent Color , ĊĠĠĠĠĠ Ġint ArrayOf (- state _ checked ) Ġto Ġit . window . backgroundColor . blend With ( Color . WHITE , Ġ 0 . 7 f ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġtrack Tint List Ġ= Ġcolor State ListOf ( ĊĠĠĠĠĠ Ġint ArrayOf ( state _ checked ) Ġto Ġit . accent Color . with Alpha ( 0 . 5 f ), ĊĠĠĠĠĠ Ġint ArrayOf (- state _ checked ) Ġto Ġit . window . backgroundColor . blend With ( Color . WHITE , Ġ 0 . 2 f ) ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġthe med ( view : ĠScroll View ) Ġ= Ġview . apply Ġ{ ĊĠ Ġtheme Aware Ġ{ ĊĠĠĠ ĠScroll View Compat . set Edge Effect Color ( view , Ġit . accent Color ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġthe med ( view : ĠNested ScrollView ) Ġ= Ġview . apply Ġ{ ĊĠ Ġtheme Aware Ġ{ ĊĠĠĠ ĠScroll View Compat . set Edge Effect Color ( view , Ġit . accent Color ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġthe med ( view : ĠHorizontal ScrollView ) Ġ= Ġview . apply Ġ{ ĊĠ Ġtheme Aware Ġ{ ĊĠĠĠ ĠScroll View Compat . set Edge Effect Color ( view , Ġit . accent Color ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġ< T Ġ: ĠRecyclerView > Ġthe med ( view : ĠT ): ĠT Ġ= Ġview . apply Ġ{ ĊĠ Ġtheme Aware Ġ{ ĊĠĠĠ Ġedge Effect Factory Ġ= Ġobject Ġ: ĠEdge Effect Factory () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġcreate Edge Effect ( view : ĠRecyclerView , Ġdirection : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ ĠEdge Effect ( view . context ). apply Ġ{ Ġcolor Ġ= Ġit . accent Color Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġthe med ( toolbar : ĠToolbar ) Ġ= Ġtoolbar . apply Ġ{ ĊĠ Ġval Ġtitle View Ġ= Ġfind Title View () ĊĠ Ġtitle View . apply Style ( app Title ) ĊĠ Ġtheme Aware Ġ{ ĊĠĠĠ Ġtitle View . textColor Ġ= Ġit . textColor Heading ĊĠ Ġ} ĊĊĠ Ġval Ġset R ipple Ġ= Ġ{ Ġchild : ĠView Ġ-> ĊĠĠĠ Ġchild . theme Aware Ġ{ ĊĠĠĠĠĠ Ġchild . background Ġ= Ġborder less R ipple Drawable ( it . pressed Color ( it . accent Color )). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġmax Of ( radius , Ġcontext . dp ( 2 0 )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġtoolbar . view Changes Ġ{ Ġchild Ġ-> ĊĠĠĠ Ġif Ġ( child Ġis ĠImage Button ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠNavigation Ġicon . ĊĠĠĠĠĠ Ġset R ipple ( child ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( child Ġis ĠAction Menu View ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠMenu Ġitems . ĊĠĠĠĠĠ Ġchild . view Changes ( set R ipple ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠViewGroup . view Changes ( action : Ġ( View ) Ġ-> ĠUnit ) Ġ{ ĊĠ Ġchildren . forEach ( action ) ĊĠ Ġon View Adds ( action ) Ċ } Ċ Ċ private Ġfun Ġthe med ( view : ĠFloating ActionButton ) Ġ= Ġview . apply Ġ{ ĊĠ Ġtheme Aware Ġ{ ĊĠĠĠ Ġbackground Tint List Ġ= ĠColor State List . valueOf ( it . fab Color ) ĊĠĠĠ Ġcolor Filter Ġ= ĠPort er D uff Color Filter ( it . fab Icon , ĠSRC _ AT OP ) ĊĠĠĠ Ġri pple Color Ġ= Ġit . pressed Color ( it . fab Color ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġ< T Ġ: ĠProgress Bar > Ġthe med ( view : ĠT ): ĠT Ġ= Ġview . apply Ġ{ ĊĠ Ġtheme Aware Ġ{ ĊĠĠĠ Ġview . in determinate Tint List Ġ= ĠColor State List . valueOf ( it . accent Color ) ĊĠ Ġ} Ċ } Ċ