package Ġse . st ob ix . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . view . Context Theme Wrapper Ċ Ċ /** Ċ Ġ* ĠFunctions Ġthat Ġget Ġthe Ġtheme Ġcolors Ġfor Ġattribute Ġvalues Ġfor Ġthe Ġcurrent Ġcontext Ġtheme Ċ Ġ*/ Ċ class ĠColor Handler ( val Ġctx : ĠContext , Ġvar Ġdefault Color List : ĠList < Int > Ġ= ĠlistOf ()) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġresource Ġint Ġvalue Ġof Ġthe Ġtheme . ĠDefaults Ġto Ġthe Ġtheme Ġof Ġ[ ctx ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtheme Res : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġcolor Ġto Ġreturn Ġwhen Ġthe Ġattribute Ġconversion Ġfunction Ġin Ġ[ with Color Fun ] Ġfound Ġno Ġcolor Ġfor Ġthe Ġattribute ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġvar Ġmissing Color : ĠInt Ġ= ĠColor . MAG ENT A ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġ[ Resources . Theme ] Ġthat Ġ[ Color Handler ] Ġis Ġcurrently Ġusing . ĠSet Ġby Ġ[ ctx ] Ġor Ġvia Ġ[ theme Res ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtheme : ĠResources . Theme ĊĠĠĠĠĠĠĠ Ġget () Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġtheme Res ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( t Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrapper Ġ= ĠContext Theme Wrapper ( ctx , t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper . theme ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . theme ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor List Ġthe ĠList Ġof ĠR . attr Ġvalues Ġwe Ġwant Ġto Ġget Ġthe Ġcolors Ġfor ĊĠĠĠĠ Ġ* Ġ@ param Ġf Ġa Ġfunction Ġthat Ġtakes Ġin Ġa ĠMap < Color Attr IDs , ĠCorre sponding Color > Ġpair ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< A > with Color Map ( color List : List < Int > Ġ= default Color List , Ġf : Ġ( Attr Color Map : ĠMap < Int , Int >) Ġ-> ĠA ): ĠA Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsorted Colors Ġ= Ġcolor List . sorted (). to IntArray () ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Color Map ( sorted Colors , f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTakes Ġin Ġjust Ġa Ġsingle Ġattribute Ġand Ġreturns Ġits Ġcolor . ĊĠĠĠĠ Ġ* ĠThis Ġis Ġhighly Ġin efficient Ġcompared Ġto Ġthe Ġ[ with Color Fun ]/ [ with Color Map ] Ġversions . ĊĠĠĠĠ Ġ* ĠAlso , Ġit Ġis Ġbroken Ġand Ġapparently Ġdoes Ġnot Ġwork Ġever . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġconvert One ( attribute : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġwith Color Map ( listOf ( attribute )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ attribute ] Ġ?: missing Color ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO Ġuse Ġget Color State List Ġinstead Ġof Ġget Color Ġto Ġget Ġnull Ġinstead Ġof Ġcrashes Ġwhen Ġthe Ġindex Ġis Ġnot Ġa Ġcolor ! ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor List Ġthe Ġarray Ġof ĠR . attr Ġvalues Ġwe Ġwant Ġto Ġget Ġthe Ġcolors Ġfor ĊĠĠĠĠ Ġ* Ġ@ param Ġf Ġa Ġfunction Ġthat Ġtakes Ġin Ġa ĠMap < Color Attr IDs , ĠCorre sponding Color > Ġpair ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun < A > Ġwith Color Map ( sorted Color Array : ĠInt Array , Ġf : Ġ( Attr Color Map : ĠMap < Int , Int >) Ġ-> ĠA ) Ġ: ĠA Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarr Ġ= theme . obtain Styled Attributes ( sorted Color Array ) ĊĠĠĠĠĠĠĠ Ġval Ġcolor Map Ġ= Ġsorted Color Array . map Ġ{ Ġcolor Res Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Val Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr . getIndex ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorted Color Array . indexOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Res ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Res Ġto Ġcolor Val ĊĠĠĠĠĠĠĠ Ġ}. toMap () ĊĠĠĠĠĠĠĠ Ġval Ġretval Ġ= Ġf ( color Map ) ĊĠĠĠĠĠĠĠ Ġarr . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġretval ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor List Ġthe Ġlist Ġof ĠR . attr Ġvalues Ġwe Ġwant Ġto Ġget Ġthe Ġcolors Ġfor ĊĠĠĠĠ Ġ* Ġ@ param Ġf Ġa Ġfunction Ġthat Ġtakes Ġin Ġa Ġfunction Ġthat Ġtakes Ġin Ġthe ĠR . attr Ġvalues Ġgiven Ġin Ġsorted Color Array Ġand Ġoutputs Ġthe Ġcorrect Ġcolor Ġint Ġvalue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< A > with Color Fun ( color List : List < Int > Ġ= Ġdefault Color List , Ġf : Ġ( Ġattr To Col : Ġ( attr : Int ) Ġ-> ĠInt Ġ) Ġ-> ĠA ) Ġ: ĠA { ĊĠĠĠĠĠĠĠ Ġval Ġsorted Colors Ġ= Ġcolor List . sorted (). to IntArray () ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Color Fun ( sorted Colors , f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor List Ġthe Ġarray Ġof ĠR . attr Ġvalues Ġwe Ġwant Ġto Ġget Ġthe Ġcolors Ġfor ĊĠĠĠĠ Ġ* Ġ@ param Ġf Ġa Ġfunction Ġthat Ġtakes Ġin Ġa Ġfunction Ġg Ġthat Ġtakes Ġin Ġthe ĠR . attr Ġvalues Ġgiven Ġin Ġsorted Color Array Ġand Ġoutputs Ġthe Ġcorrect Ġcolor Ġint Ġvalue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġ< A > with Color Fun ( color List : IntArray , Ġf : Ġ( Ġattr To Col : Ġ( attr : Int ) Ġ-> ĠInt Ġ) Ġ-> ĠA ): A Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfunction Valid Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġarr Ġ= Ġtheme . obtain Styled Attributes ( color List ) ĊĠĠĠĠĠĠĠ Ġfun Ġget Color ( color : ĠInt ): ĠInt { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! function Valid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" function Ġcalled Ġoutside Ġits Ġwith Color Fun Ġloop ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġarr . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr . getIndex ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor List . indexOf ( color )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġretval Ġ= Ġf (:: getColor ) ĊĠĠĠĠĠĠĠ Ġarr . also { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Valid Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ}. recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġretval ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor List Ġthe ĠList Ġof ĠR . attr Ġvalues Ġwe Ġwant Ġto Ġget Ġthe Ġcolors Ġfor ĊĠĠĠĠ Ġ* Ġ@ param Ġf Ġa Ġfunction Ġthat Ġtakes Ġin Ġa Ġfunction Ġattr To Col Ġthat Ġtakes Ġin Ġthe ĠR . attr Ġvalues Ġgiven Ġin Ġsorted Color Array , Ġa Ġdefault Ġcolor Ġvalue Ġfor Ġcolors Ġnot Ġfound , Ġand Ġoutputs Ġthe Ġcorrect Ġcolor Ġint Ġvalue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< A > with Def Color Fun ( color List : List < Int > Ġ= Ġdefault Color List , Ġf : Ġ( Ġattr To Col : Ġ( attr : Int , default Col : Int ) Ġ-> ĠInt ) Ġ-> ĠA ): ĠA Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsorted Colors Ġ= Ġcolor List . sorted (). to IntArray () ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Def Color Fun ( sorted Colors , f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor List Ġthe Ġarray Ġof ĠR . attr Ġvalues Ġwe Ġwant Ġto Ġget Ġthe Ġcolors Ġfor ĊĠĠĠĠ Ġ* Ġ@ param Ġf Ġa Ġfunction Ġthat Ġtakes Ġin Ġa Ġfunction Ġthat Ġtakes Ġin Ġthe ĠR . attr Ġvalues Ġgiven Ġin Ġsorted Color Array , Ġa Ġdefault Ġcolor Ġvalue Ġfor Ġcolors Ġnot Ġfound , Ġand Ġoutputs Ġthe Ġcorrect Ġcolor Ġint Ġvalue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġ< A > with Def Color Fun ( color List : IntArray , Ġf : Ġ( attr To Col : Ġ( attr : Int , default Col : Int ) Ġ-> ĠInt ) Ġ-> ĠA ) Ġ: ĠA { ĊĠĠĠĠĠĠĠ Ġvar Ġfunction Valid Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġvar Ġarr Ġ= Ġtheme . obtain Styled Attributes ( color List ) ĊĠĠĠĠĠĠĠ Ġfun Ġget Color ( color : ĠInt , Ġdef Color : ĠInt ): ĠInt { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! function Valid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" function Ġcalled Ġoutside Ġits Ġwith Color Fun Ġloop ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġarr . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr . getIndex ( color List . indexOf ( color )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr . getIndex ( color List . indexOf ( def Color )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Color )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠretVal Ġ= Ġf (:: getColor ) ĊĠĠĠĠĠĠĠ Ġarr . also { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Valid Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. recycle () ĊĠĠĠĠĠĠĠ Ġreturn ĠretVal ĊĠĠĠ Ġ} Ċ Ċ /* ĊĠĠ Ġfun Ġwith Theme Colors ( theme : ĠInt Ġ){ ĊĠĠĠ Ġ} ĊĊ Ġ*/ Ċ }