/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠNew ĠVector ĠLtd Ċ Ġ* Ċ Ġ* Ġ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 Ġim . vector . ui . themes ĊĊ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . support . annotation . Attr Res Ċ import Ġandroid . support . annotation . Color Int Ċ import Ġandroid . support . design . widget . Tab Layout Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 4 . graphics . drawable . Drawable Compat Ċ import Ġandroid . support . v 7 . preference . Preference Manager Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . Menu Ċ import Ġim . vector . R Ċ import Ġim . vector . Vector App Ċ import Ġim . vector . activity . Vector Group Details Activity Ċ import Ġorg . matrix . android sdk . util . Log Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠUtil Ġclass Ġfor Ġmanaging Ġthemes . Ċ Ġ*/ Ċ object ĠTheme Utils Ġ{ ĊĠĠĠ Ġconst Ġval ĠLOG _ TAG Ġ= Ġ" Theme Utils " ĊĊĠĠĠ Ġ// Ġpreference Ġkey ĊĠĠĠ Ġconst Ġval ĠAP PLICATION _ THEME _ KEY Ġ= Ġ" APPLICATION _ THEME _ KEY " ĊĊĠĠĠ Ġ// Ġthe Ġtheme Ġpossible Ġvalues ĊĠĠĠ Ġprivate Ġconst Ġval ĠTHE ME _ DARK _ VALUE Ġ= Ġ" dark " ĊĠĠĠ Ġprivate Ġconst Ġval ĠTHE ME _ LIGHT _ VALUE Ġ= Ġ" light " ĊĠĠĠ Ġprivate Ġconst Ġval ĠTHE ME _ BLACK _ VALUE Ġ= Ġ" black " ĊĠĠĠ Ġprivate Ġconst Ġval ĠTHE ME _ STATUS _ VALUE Ġ= Ġ" status " ĊĊĠĠĠ Ġprivate Ġval Ġm Color By Attr Ġ= ĠHashMap < Int , ĠInt >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġthe Ġselected Ġapplication Ġtheme ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġthe Ġcontext ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġselected Ġapplication Ġtheme ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Application Theme ( context : ĠContext ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getString ( APPLICATION _ THEME _ KEY , ĠTHE ME _ BLACK _ VALUE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġthe Ġapplication Ġtheme ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġa Theme Ġthe Ġnew Ġtheme ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Application Theme ( context : ĠContext , Ġa Theme : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( APPLICATION _ THEME _ KEY , Ġa Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( a Theme ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTHE ME _ LIGHT _ VALUE Ġ-> ĠVector App . getInstance (). set Theme ( R . style . App Theme _ Light ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTHE ME _ DARK _ VALUE Ġ-> ĠVector App . getInstance (). set Theme ( R . style . App Theme _ Dark ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTHE ME _ BLACK _ VALUE Ġ-> ĠVector App . getInstance (). set Theme ( R . style . App Theme _ Black ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTHE ME _ STATUS _ VALUE Ġ-> ĠVector App . getInstance (). set Theme ( R . style . App Theme _ Status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠVector App . getInstance (). set Theme ( R . style . App Theme _ Black ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Color By Attr . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġactivity Ġtheme Ġaccording Ġto Ġthe Ġselected Ġone . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Ġthe Ġactivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Activity Theme ( activity : ĠActivity , Ġother Themes : ĠActivity Other Themes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( getApplication Theme ( activity )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTHE ME _ LIGHT _ VALUE Ġ-> Ġactivity . set Theme ( other Themes . light ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTHE ME _ DARK _ VALUE Ġ-> Ġactivity . set Theme ( other Themes . dark ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTHE ME _ BLACK _ VALUE Ġ-> Ġactivity . set Theme ( other Themes . black ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTHE ME _ STATUS _ VALUE Ġ-> Ġactivity . set Theme ( other Themes . status ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Color By Attr . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe ĠTab Layout Ġcolors . ĊĠĠĠĠ Ġ* ĠIt Ġseems Ġthat Ġthere Ġis Ġno Ġproper Ġway Ġto Ġmanage Ġit Ġwith Ġthe Ġmanifest Ġfile . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Ġthe Ġactivity ĊĠĠĠĠ Ġ* Ġ@ param Ġlayout ĠĠ Ġthe Ġlayout ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Tab Layout Theme ( activity : ĠActivity , Ġlayout : ĠTab Layout ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġis ĠVector Group Details Activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextColor : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunderline Color : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbackgroundColor : ĠInt ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . equals ( getApplication Theme ( activity ), ĠTHE ME _ LIGHT _ VALUE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextColor Ġ= ĠContext Compat . getColor ( activity , Ġandroid . R . color . white ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunderline Color Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠContext Compat . getColor ( activity , ĠR . color . tab _ groups ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( TextUtils . equals ( getApplication Theme ( activity ), ĠTHE ME _ STATUS _ VALUE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextColor Ġ= ĠContext Compat . getColor ( activity , Ġandroid . R . color . white ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunderline Color Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= Ġget Color ( activity , ĠR . attr . color Primary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextColor Ġ= ĠContext Compat . getColor ( activity , ĠR . color . tab _ groups ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunderline Color Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= Ġget Color ( activity , ĠR . attr . color Primary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . set Tab Text Colors ( textColor , ĠtextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . setSelected Tab Indicator Color ( underline Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . set BackgroundColor ( backgroundColor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans lates Ġcolor Ġattributes Ġto Ġcolors ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġc ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor Attribute ĠColor ĠAttribute ĊĠĠĠĠ Ġ* Ġ@ return ĠRequest ed ĠColor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Color Int ĊĠĠĠ Ġfun Ġget Color ( c : ĠContext , Ġ@ Attr Res Ġcolor Attribute : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Color By Attr . containsKey ( color Attribute )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Color By Attr [ color Attribute ] Ġas ĠInt ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġmatched Color : ĠInt ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠTyped Value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . theme . resolve Attribute ( color Attribute , Ġcolor , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatched Color Ġ= Ġcolor . data ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( LOG _ TAG , Ġ" Unable Ġto Ġget Ġcolor ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatched Color Ġ= ĠContext Compat . getColor ( c , Ġandroid . R . color . holo _ red _ dark ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Color By Attr [ color Attribute ] Ġ= Ġmatched Color ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmatched Color ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġresource ĠId Ġapplied Ġto Ġthe Ġcurrent Ġtheme ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġc ĠĠĠĠĠĠĠĠĠ Ġthe Ġcontext ĊĠĠĠĠ Ġ* Ġ@ param Ġresource Id Ġthe Ġresource Ġid ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġresource ĠId Ġfor Ġthe Ġcurrent Ġtheme ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget ResourceId ( c : ĠContext , Ġresource Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . equals ( getApplication Theme ( c ), ĠTHE ME _ LIGHT _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠText Utils . equals ( getApplication Theme ( c ), ĠTHE ME _ STATUS _ VALUE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( resourceId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . line _ divider _ dark Ġ-> ĠR . drawable . line _ divider _ light ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style . Floating _ Actions _ Menu Ġ-> ĠR . style . Floating _ Actions _ Menu _ Light ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġresource Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresource Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġthe Ġmenu Ġicons Ġcolors ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmenu Ġ Ġthe Ġmenu ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor Ġthe Ġcolor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġt int Menu Icons ( menu : ĠMenu , Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmenu . size ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġmenu . getItem ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= Ġitem . icon ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrapped Ġ= ĠDrawable Compat . wrap ( drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . mutate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrawable Compat . set Tint ( wrapped , Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . icon Ġ= Ġdrawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠT int Ġthe Ġdrawable Ġwith Ġa Ġtheme Ġattribute ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠ Ġthe Ġcontext ĊĠĠĠĠ Ġ* Ġ@ param Ġdrawable Ġ Ġthe Ġdrawable Ġto Ġt int ĊĠĠĠĠ Ġ* Ġ@ param Ġattribute Ġthe Ġtheme Ġcolor ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġt int ed Ġdrawable ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġt int Drawable ( context : ĠContext , Ġdrawable : ĠDrawable , Ġ@ Attr Res Ġattribute : ĠInt ): ĠDrawable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġt int Drawable With Color ( drawable , Ġget Color ( context , Ġattribute )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠT int Ġthe Ġdrawable Ġwith Ġa Ġcolor Ġinteger ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdrawable Ġthe Ġdrawable Ġto Ġt int ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor ĠĠĠ Ġthe Ġcolor ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġt int ed Ġdrawable ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġt int Drawable With Color ( drawable : ĠDrawable , Ġ@ Color Int Ġcolor : ĠInt ): ĠDrawable Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt int ed Ġ= ĠDrawable Compat . wrap ( drawable ) ĊĠĠĠĠĠĠĠ Ġdrawable . mutate () ĊĠĠĠĠĠĠĠ ĠDrawable Compat . set Tint ( tint ed , Ġcolor ) ĊĠĠĠĠĠĠĠ Ġreturn Ġt int ed ĊĠĠĠ Ġ} Ċ } Ċ