/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠJ ared ĠR um ml er Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . j ared rum ml er . cy ane a . in fl ator Ċ Ċ import Ġandroid . R . attr Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Context Wrapper Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . R ipple Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Build . VERSION Ċ import Ġandroid . os . Build . VERSION _ CODES Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Abs ListView Ċ import Ġandroid . widget . Compound Button Ċ import Ġandroid . widget . DatePicker Ċ import Ġandroid . widget . Image Button Ċ import Ġandroid . widget . Switch Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Time Picker Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . appcompat . view . menu . List MenuItem View Ċ import Ġandroidx . appcompat . widget . AlertDialog Layout Ċ import Ġandroidx . appcompat . widget . AppCompat Drawable Manager Ċ import Ġandroidx . appcompat . widget . Search View . Search Auto Complete Ċ import Ġandroidx . appcompat . widget . Switch Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . google . android . material . bottom app bar . Bottom AppBar Ċ import Ġcom . google . android . material . floating action button . Floating ActionButton Ċ import Ġcom . google . android . material . navigation . Navigation View Ċ import Ġcom . google . android . material . text field . TextInput Layout Ċ import Ġcom . j ared rum ml er . cy ane a . Cy ane a Ċ import Ġcom . j ared rum ml er . cy ane a . R Ċ import Ġcom . j ared rum ml er . cy ane a . delegate . Cy ane a Delegate Ċ import Ġcom . j ared rum ml er . cy ane a . tint ing . Edge Effect Tint Ċ import Ġcom . j ared rum ml er . cy ane a . tint ing . Widget Tint Ċ import Ġcom . j ared rum ml er . cy ane a . utils . Color Utils Ċ import Ġcom . j ared rum ml er . cy ane a . utils . Reflection Ċ Ċ /** Ċ Ġ* ĠClass Ġto Ġprocess Ġviews Ġin Ġconnection Ġwith Ġthe Ġ[ Cy ane a LayoutInflater ]. ĠTo Ġadd Ġa Ġ[ Cy ane a View Processor ] Ġyou Ġmust Ċ Ġ* Ġlet Ġyour Ġapplication Ġor Ġactivity Ġimplement Ġ[ Cy ane a View Processor . Provider ]. ĠWhen Ġa Ġview Ġis Ġcreated Ġit Ġwill Ċ Ġ* Ġcall Ġ[ Cy ane a View Processor . process ] Ġif Ġ[ Cy ane a View Processor . should Process View ] Ġreturns Ġtrue . Ċ Ġ*/ Ċ abstract Ġclass ĠCy ane a View Processor < T Ġ: ĠView > Ġ{ ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠProcess Ġa Ġnewly Ġcreated Ġview . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġview ĊĠĠ Ġ* ĠThe Ġnewly Ġcreated Ġview . ĊĠĠ Ġ* Ġ@ param Ġattrs ĊĠĠ Ġ* ĠThe Ġview 's Ġ[ attributes ][ Attribute Set ] ĊĠĠ Ġ* Ġ@ param Ġcy ane a ĊĠĠ Ġ* ĠThe Ġ[ cy ane a ][ Cy ane a ] Ġinstance Ġused Ġfor Ġstyling Ġviews . ĊĠĠ Ġ*/ ĊĠ Ġabstract Ġfun Ġprocess ( view : ĠT , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCheck Ġif Ġa Ġview Ġshould Ġbe Ġprocessed . ĠBy Ġdefault , Ġthis Ġchecks Ġif Ġthe Ġview Ġis Ġan Ġinstance Ġof Ġ[. getType ]. ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġview ĊĠĠ Ġ* ĠThe Ġview Ġto Ġcheck ĊĠĠ Ġ* Ġ@ return ĠTrue Ġif Ġthis Ġview Ġshould Ġbe Ġprocessed . ĊĠĠ Ġ*/ ĊĠ Ġopen Ġfun Ġshould Process View ( view : ĠView ) Ġ= ĠgetType (). is Instance ( view ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġclass Ġfor Ġthe Ġgiven Ġview ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ return ĠThe Ġclass Ġfor ĠT ĊĠĠ Ġ*/ ĊĠ Ġprotected Ġabstract Ġfun ĠgetType (): ĠClass < T > ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAn Ġinterface Ġthat Ġmay Ġbe Ġused Ġin Ġan Ġ[ activity ][ Activity ] Ġto Ġprovide Ġ[ view Ġprocessors ][ Cy ane a View Processor ] ĊĠĠ Ġ* Ġto Ġthe Ġ[ Cy ane a Delegate ]. ĊĠĠ Ġ*/ ĊĠ Ġinterface ĠProvider Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġan Ġarray Ġof Ġ[ view Ġprocessors ][ Cy ane a View Processor ] Ġto Ġstyle Ġviews . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠAn Ġarray Ġof Ġdecorators Ġfor Ġthe Ġ[ Cy ane a Delegate ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget View Processors (): ĠArray < Cy ane a View Processor < out ĠView >> ĊĠ Ġ} Ċ } Ċ Ċ // Ġ================================================================= ================ =============== Ċ // ĠProcess ors Ċ Ċ internal Ġclass ĠAlertDialog Processor Ġ: ĠCy ane a View Processor < View >() Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetType (): ĠClass < View > Ġ= ĠView :: class . java ĊĊĠ Ġoverride Ġfun Ġshould Process View ( view : ĠView ): ĠBoolean Ġ= Ġview Ġis ĠAlertDialog Layout Ġ|| ĠCLASS _ NAME Ġ== Ġview . java Class . name ĊĊĠ Ġoverride Ġfun Ġprocess ( view : ĠView , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) Ġ{ ĊĠĠĠ Ġview . set BackgroundColor ( cy ane a . backgroundColor ) Ġ// ĠTheme ĠAlertDialog Ġbackground ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠCLASS _ NAME Ġ= Ġ" com . android . internal . widget . AlertDialog Layout " ĊĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠBottom AppBar Processor Ġ: ĠCy ane a View Processor < Bottom AppBar >() Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetType (): ĠClass < Bottom AppBar > Ġ= ĠBottom AppBar :: class . java ĊĊĠ Ġoverride Ġfun Ġprocess ( view : ĠBottom AppBar , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) Ġ{ ĊĠĠĠ Ġview . background Tint ?. let Ġ{ Ġview . background Tint Ġ= Ġcy ane a . t inter . tint ( it ) Ġ} ĊĠĠĠ Ġview . post Ġ{ ĊĠĠĠĠĠ Ġview . context ?. let Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠ Ġ( context Ġas ? ĠActivity )?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcy ane a . tint ( view . menu , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ(( context Ġas ? ĠContext Wrapper )?. base Context Ġas ? ĠActivity )?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcy ane a . tint ( view . menu , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Cy ane a View Processor ] Ġthat Ġstyles Ġ[ buttons ][ Compound Button ] Ġin Ġthe Ġoverflow Ġmenu . Ċ Ġ*/ Ċ @ Requires Api ( Build . VERSION _ CODES . M ) Ċ internal Ġclass ĠCompound Button Processor Ġ: ĠCy ane a View Processor < Compound Button >() Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetType (): ĠClass < Compound Button > Ġ= ĠCompound Button :: class . java ĊĊĠ Ġ@ Suppress Lint (" Private Resource ") ĊĠ Ġoverride Ġfun Ġprocess ( view : ĠCompound Button , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) Ġ{ ĊĠĠĠ Ġview . button Tint List ?. let Ġ{ Ġcy ane a . t inter . tint ( it ) Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠ Ġview . button Tint List Ġ= Ġcy ane a . t inter . tint ( ĊĠĠĠĠĠĠĠĠĠ Ġview . context . getColor State List ( R . color . abc _ tint _ btn _ check able ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġbackground Ġ= Ġview . background ĊĠĠĠ Ġif Ġ( background Ġis ĠR ipple Drawable ) Ġ{ ĊĠĠĠĠĠ Ġval Ġres id Ġ= Ġif Ġ( cy ane a . is Dark ) ĠR . color . ripple _ material _ dark Ġelse ĠR . color . ripple _ material _ light ĊĠĠĠĠĠ Ġval Ġunchecked Ġ= ĠContext Compat . getColor ( view . context , Ġres id ) ĊĠĠĠĠĠ Ġval Ġchecked Ġ= ĠColor Utils . adjust Alpha ( cy ane a . accent , Ġ 0 . 4 f ) ĊĠĠĠĠĠ Ġval Ġc sl Ġ= ĠColor State List ( ĊĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf (- attr . state _ activated , Ġ- attr . state _ checked ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( attr . state _ activated ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( attr . state _ checked ) ĊĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( unchecked , Ġchecked , Ġchecked ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġbackground . setColor ( cs l ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠDate Picker Processor Ġ: ĠCy ane a View Processor < DatePicker >() Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetType (): ĠClass < DatePicker > Ġ= ĠDate Picker :: class . java ĊĊĠ Ġoverride Ġfun Ġprocess ( view : ĠDate Picker , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) Ġ{ ĊĠĠĠ Ġval Ġdate Picker Id Ġ= Ġview . context . resources . getIdentifier (" date _ picker _ header ", Ġ" id ", Ġ" android ") ĊĠĠĠ Ġif Ġ( date Picker Id Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġview . findViewById < ViewGroup >( date Picker Id )?. let Ġ{ Ġlayout Ġ-> ĊĠĠĠĠĠĠĠ Ġcy ane a . t inter . tint ( layout . background ) ĊĠĠĠĠĠĠĠ Ġif Ġ( VERSION . SDK _ INT Ġ>= ĠVERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcy ane a . t inter . tint ( layout . background Tint List ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠFloating ActionButton Processor Ġ: ĠCy ane a View Processor < Floating ActionButton >() Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetType (): ĠClass < Floating ActionButton > Ġ= ĠFloating ActionButton :: class . java ĊĊĠ Ġoverride Ġfun Ġprocess ( view : ĠFloating ActionButton , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) Ġ{ ĊĠĠĠ Ġcy ane a . t inter . tint ( view . background Tint List ) ĊĠ Ġ} Ċ } Ċ Ċ @ Target Api ( Build . VERSION _ CODES . M ) Ċ internal Ġclass ĠImage Button Processor Ġ: ĠCy ane a View Processor < Image Button >() Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetType (): ĠClass < Image Button > Ġ= ĠImage Button :: class . java ĊĊĠ Ġoverride Ġfun Ġprocess ( view : ĠImage Button , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) Ġ{ ĊĠĠĠ Ġcy ane a . t inter . tint ( view . background ) ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠStyle Ġmenu Ġitems Ċ Ġ*/ Ċ internal Ġclass ĠList MenuItem View Processor Ġ: ĠCy ane a View Processor < View >() Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetType (): ĠClass < View > Ġ= ĠView :: class . java ĊĊĠ Ġoverride Ġfun Ġshould Process View ( view : ĠView ): ĠBoolean Ġ= Ġview Ġis ĠList MenuItem View Ġ|| Ġview . java Class . name Ġ== ĠCLASS _ NAME ĊĊĠ Ġoverride Ġfun Ġprocess ( view : ĠView , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) Ġ{ ĊĠĠĠ Ġcy ane a . t inter . tint ( view ) ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠCLASS _ NAME Ġ= Ġ" com . android . internal . view . menu . List MenuItem View " ĊĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠNavigation View Processor Ġ: ĠCy ane a View Processor < Navigation View >() Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetType (): ĠClass < Navigation View > Ġ= ĠNavigation View :: class . java ĊĊĠ Ġoverride Ġfun Ġprocess ( view : ĠNavigation View , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) Ġ{ ĊĠĠĠ Ġval Ġbase Color Ġ= Ġif Ġ( cy ane a . is Dark ) ĠColor . WHITE Ġelse ĠColor . BLACK ĊĠĠĠ Ġval Ġun selected TextColor Ġ= ĠColor Utils . adjust Alpha ( base Color , Ġ 0 . 8 7 f ) ĊĠĠĠ Ġval Ġun selected Icon Color Ġ= ĠColor Utils . adjust Alpha ( base Color , Ġ 0 . 5 4 f ) ĊĠĠĠ Ġval Ġchecked Color Ġ= Ġcy ane a . accent ĊĊĠĠĠ Ġview . apply Ġ{ ĊĠĠĠĠĠ Ġitem TextColor Ġ= ĠColor State List ( ĊĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf (- android . R . attr . state _ checked ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( android . R . attr . state _ checked ) ĊĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( un selected TextColor , Ġchecked Color ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġitem Icon Tint List Ġ= ĠColor State List ( ĊĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf (- android . R . attr . state _ checked ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( android . R . attr . state _ checked ) ĊĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( un selected Icon Color , Ġchecked Color ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ @ Target Api ( Build . VERSION _ CODES . M ) Ċ internal Ġclass ĠSearch Auto Complete Processor Ġ: ĠCy ane a View Processor < Search Auto Complete >() Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetType (): ĠClass < Search Auto Complete > Ġ= ĠSearch Auto Complete :: class . java ĊĊĠ Ġoverride Ġfun Ġprocess ( view : ĠSearch Auto Complete , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) Ġ{ ĊĠĠĠ ĠWidget Tint . set Cursor Color ( view , Ġcy ane a . accent ) ĊĠ Ġ} Ċ } Ċ Ċ @ Target Api ( Build . VERSION _ CODES . M ) Ċ internal Ġclass ĠSwitch Processor Ġ: ĠCy ane a View Processor < Switch >() Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetType (): ĠClass < Switch > Ġ= ĠSwitch :: class . java ĊĊĠ Ġ@ Suppress Lint (" Private Resource ") ĊĠ Ġoverride Ġfun Ġprocess ( view : ĠSwitch , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) Ġ{ ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN ) Ġ{ ĊĠĠĠĠĠ Ġcy ane a . t inter . tint ( view . thumb Drawable ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠ Ġview . track Tint List Ġ= ĠContext Compat . getColor State List ( view . context , ĠR . color . abc _ tint _ switch _ track ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠSwitch Compat Processor Ġ: ĠCy ane a View Processor < Switch Compat >() Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetType (): ĠClass < Switch Compat > Ġ= ĠSwitch Compat :: class . java ĊĊĠ Ġ@ Suppress Lint (" Restricted Api ", Ġ" Private Resource ") ĊĠ Ġoverride Ġfun Ġprocess ( view : ĠSwitch Compat , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) Ġ{ ĊĠĠĠ Ġ// ĠSwitch Compat Ġsets Ġa ĠColor State List Ġon Ġthe Ġdrawable . ĠHere , Ġwe Ġget Ġand Ġmodify Ġthe Ġt int . ĊĠĠĠ Ġval Ġmanager Ġ= ĠAppCompat Drawable Manager . get () ĊĠĠĠ ĠReflection . invoke < Color State List >( manager , Ġ" get Tint List ", ĊĠĠĠĠĠĠĠ ĠarrayOf ( Context :: class . java , ĠInt :: class . java ), ĊĠĠĠĠĠĠĠ Ġview . context , ĊĠĠĠĠĠĠĠ Ġandroidx . appcompat . R . drawable . abc _ switch _ thumb _ material ĊĠĠĠ Ġ) ?. let Ġ{ Ġc sl Ġ-> ĊĠĠĠĠĠ Ġcy ane a . t inter . tint ( cs l ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠText Input Layout Processor Ġ: ĠCy ane a View Processor < TextInput Layout >() Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetType (): ĠClass < TextInput Layout > Ġ= ĠText Input Layout :: class . java ĊĊĠ Ġoverride Ġfun Ġprocess ( view : ĠText Input Layout , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) Ġ{ ĊĠĠĠ Ġif Ġ( view . box Stroke Color Ġ== ĠCy ane a . get Original Color ( R . color . cy ane a _ accent _ reference )) Ġ{ ĊĠĠĠĠĠ Ġview . box Stroke Color Ġ= Ġcy ane a . accent ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ<= ĠBuild . VERSION _ CODES . LO L LI POP _ MR 1 ) Ġ{ ĊĠĠĠĠĠ ĠReflection . getField Value < Color State List ? >( view , Ġ" focused TextColor ") ?. let Ġ{ Ġc sl Ġ-> ĊĠĠĠĠĠĠĠ Ġcy ane a . t inter . tint ( cs l ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠTextView Processor Ġ: ĠCy ane a View Processor < TextView >() Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetType (): ĠClass < TextView > Ġ= ĠTextView :: class . java ĊĊĠ Ġoverride Ġfun Ġprocess ( view : ĠTextView , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) Ġ{ ĊĠĠĠ Ġview . text Colors ?. let Ġ{ Ġcolors Ġ-> ĊĠĠĠĠĠ Ġview . setTextColor ( cy ane a . t inter . tint ( colors )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠ Ġcy ane a . t inter . tint ( view . background Tint List ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcy ane a . t inter . tint ( view . background ) ĊĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠTime Picker Processor Ġ: ĠCy ane a View Processor < Time Picker >() Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetType (): ĠClass < Time Picker > Ġ= ĠTime Picker :: class . java ĊĊĠ Ġoverride Ġfun Ġprocess ( view : ĠTime Picker , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) Ġ{ ĊĠĠĠ Ġcy ane a . t inter . tint ( view ) ĊĠ Ġ} Ċ } Ċ Ċ @ Target Api ( Build . VERSION _ CODES . M ) Ċ internal Ġclass ĠViewGroup Processor Ġ: ĠCy ane a View Processor < ViewGroup >() Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetType (): ĠClass < ViewGroup > Ġ= ĠViewGroup :: class . java ĊĊĠ Ġoverride Ġfun Ġprocess ( view : ĠViewGroup , Ġattrs : ĠAttributeSet ?, Ġcy ane a : ĠCy ane a ) Ġ{ ĊĠĠĠ ĠEdge Effect Tint . set Edge G low Color ( view , Ġcy ane a . primary ) ĊĠĠĠ Ġcy ane a . t inter . tint ( view . background ) ĊĠĠĠ Ġif Ġ( view Ġis ĠAbs ListView ) Ġ{ ĊĠĠĠĠĠ ĠWidget Tint . set Fast Scroll Thumb Color ( view , Ġcy ane a . accent ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ