package Ġde . tap . easy _ xk cd . utils Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Color Matrix Color Filter Ċ import Ġandroid . os . Build Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Color Res Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . palette . graphics . Palette Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġcom . tap . xk cd _ reader . R Ċ Ċ class ĠApp Theme ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġprefs Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠ Ġprivate Ġval Ġshared Prefs Ġ= Ġcontext . get SharedPreferences (" MainActivity ", ĠActivity . MODE _ PRIVATE ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTHE ME Ġ= Ġ" pref _ theme " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLOR _ PRIMARY Ġ= Ġ" pref _ color _ primary " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLOR _ PRIMARY _ DARK Ġ= Ġ" pref _ color _ primary _ dark " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLOR _ ACC ENT Ġ= Ġ" pref _ color _ accent " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLOR _ ACC ENT _ N IGHT Ġ= Ġ" pref _ color _ accent _ night " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠN IGHT _ THEME Ġ= Ġ" pref _ night " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠN IGHT _ SYSTEM Ġ= Ġ" pref _ night _ system " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠA MO LED _ N IGHT Ġ= Ġ" pref _ amo led " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDET ECT _ COLOR Ġ= Ġ" pref _ detect _ color " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAUTO _ N IGHT _ START _ MIN Ġ= Ġ" pref _ auto _ night _ start _ min " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAUTO _ N IGHT _ START _ HOUR Ġ= Ġ" pref _ auto _ night _ start _ hour " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAUTO _ N IGHT _ END _ MIN Ġ= Ġ" pref _ auto _ night _ end _ min " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAUTO _ N IGHT _ END _ HOUR Ġ= Ġ" pref _ auto _ night _ end _ hour " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠIN VERT _ COLORS Ġ= Ġ" pref _ invert " ĊĊĠĠĠĠĠĠĠ Ġval Ġnegative Color Filter Ġ= ĠColor Matrix Color Filter ( float ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 . 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f , Ġ 2 5 5 f , Ġ// red ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , Ġ- 1 . 0 f , Ġ 0 f , Ġ 0 f , Ġ 2 5 5 f , Ġ// green ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , Ġ 0 f , Ġ- 1 . 0 f , Ġ 0 f , Ġ 2 5 5 f , Ġ// blue ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , Ġ 0 f , Ġ 0 f , Ġ 1 . 0 f , Ġ 0 f Ġ// alpha ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdetect Colors Ġby ĠReadOnly Pref ( prefs , ĠDET ECT _ COLOR , Ġtrue ) ĊĠĠĠ Ġfun Ġbitmap Contains Color ( bitmap : ĠBitmap , Ġcom ic Number : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// TODO ĠAdd Ġmore Ġspecial Ġcases Ġhere ĊĠĠĠĠĠĠĠ Ġif Ġ( com ic Number Ġ== Ġ 1 9 1 3 ) Ġ// https :// github . com / tom - and ers / Easy _ xk cd / issues / 1 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( com ic Number Ġ== Ġ 1 5 5 1 ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( com ic Number Ġ== Ġ 2 0 1 8 ) Ġ// This Ġone Ġdoesn 't Ġwork Ġw / o Ġthe Ġyellow Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( detect Colors ) Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPalette . from ( bitmap ). generate (). vi br ant Sw atch Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġuse System Night Theme () Ġ= ĠBuild . VERSION . SDK _ INT Ġ>= Ġ 2 9 Ġ&& Ġprefs . getBoolean ( N IGHT _ SYSTEM , Ġtrue ) ĊĊĠĠĠ Ġfun Ġa mo led Theme Enabled () Ġ= Ġnight Theme Enabled Ġ&& Ġprefs . getBoolean ( AMO LED _ N IGHT , Ġfalse ) ĊĊĠĠĠ Ġprivate Ġvar Ġnight Theme Pref Ġby ĠPref ( prefs , ĠN IGHT _ THEME , Ġfalse ) ĊĊĠĠĠ Ġvar Ġnight Theme Enabled : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( use System Night Theme ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġsystem Ġsetting Ġin ĠAndroid Ġ 1 0 Ġand Ġabove ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( context . resources . configuration . ui Mode Ġand ĠConfiguration . UI _ MODE _ N IGHT _ MASK ) Ġ== ĠConfiguration . UI _ MODE _ N IGHT _ YES ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnight Theme Pref ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnight Theme Pref Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnight Theme Enabled Ignore Auto Night () Ġ= Ġnight Theme Pref ĊĊĠĠĠ Ġ@ Color Int ĊĠĠĠ Ġprivate Ġfun Ġget Color (@ Color Res Ġcolor : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠContext Compat . getColor ( context , Ġcolor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġaccent Color Ġby ĠPref ( shared Prefs , ĠCOLOR _ ACC ENT , ĠR . color . Accent L ime ) ĊĠĠĠ Ġvar Ġaccent Color Night Ġby ĠPref ( shared Prefs , ĠCOLOR _ ACC ENT _ N IGHT , Ġaccent Color ) ĊĊĠĠĠ Ġprivate Ġvar Ġ_ primary Color Dark Ġby ĠPref ( shared Prefs , ĠCOLOR _ PRIMARY _ DARK , ĠR . color . Primary Dark Blue Grey ) ĊĠĠĠ Ġval Ġprimary Color Dark : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( night Theme Enabled ) ĠColor . BLACK Ġelse Ġ_ primary Color Dark ĊĊĠĠĠ Ġprivate Ġvar Ġ_ primary Color Ġby ĠPref ( shared Prefs , ĠCOLOR _ PRIMARY , Ġget Color ( R . color . Primary Blue Grey )) ĊĊĠĠĠ Ġfun Ġget Primary Color ( ignore Night Theme : ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( ignore Night Theme Ġ|| Ġ! night Theme Enabled ) Ġ_ primary Color Ġelse ĠColor . BLACK ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġprimary Color To Dark Color Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary Pur ple ) Ġto Ġget Color ( R . color . Primary Dark Pur ple ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary Deep Pur ple ) Ġto Ġget Color ( R . color . Primary Dark Deep Pur ple ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary In digo ) Ġto Ġget Color ( R . color . Primary Dark In digo ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary Blue ) Ġto Ġget Color ( R . color . Primary Dark Blue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary Light Blue ) Ġto Ġget Color ( R . color . Primary Dark Light Blue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary C yan ) Ġto Ġget Color ( R . color . Primary Dark C yan ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary Te al ) Ġto Ġget Color ( R . color . Primary Dark Te al ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary Green ) Ġto Ġget Color ( R . color . Primary Dark Green ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary Light Green ) Ġto Ġget Color ( R . color . Primary Dark Light Green ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary L ime ) Ġto Ġget Color ( R . color . Primary Dark L ime ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary Yellow ) Ġto Ġget Color ( R . color . Primary Dark Yellow ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary Am ber ) Ġto Ġget Color ( R . color . Primary Dark Am ber ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary Orange ) Ġto Ġget Color ( R . color . Primary Dark Orange ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary Deep Orange ) Ġto Ġget Color ( R . color . Primary Dark Deep Orange ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary Red ) Ġto Ġget Color ( R . color . Primary Dark Red ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary B rown ) Ġto Ġget Color ( R . color . Primary Dark B rown ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary Grey ) Ġto Ġget Color ( R . color . Primary Dark Grey ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary Blue Grey ) Ġto Ġget Color ( R . color . Primary Dark Blue Grey ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Primary Black ) Ġto Ġget Color ( R . color . Primary Dark Black ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġprimary Colors Ġby Ġlazy Ġ{ Ġprimary Color To Dark Color . keys Ġ} ĊĊĠĠĠ Ġval Ġaccent Colors Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Pur ple ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent In digo ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Blue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Light Blue ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent C yan ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Te al ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Green ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// getColor ( R . color . Accent Light Green ), Ġthis Ġcolor Ġdidn 't Ġwork Ġfor Ġsome Ġreason ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent L ime ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Yellow ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Am ber ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Orange ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Deep Orange ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Red ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Primary Color ( color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ primary Color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġ_ primary Color Dark Ġ= Ġprimary Color To Dark Color . get OrDefault ( color , ĠR . color . Primary Dark Blue Grey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġtheme : ĠInt ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccent Color Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchoose Theme Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġnight Theme : ĠInt , Ġregular Theme : ĠInt Ġ-> Ġif Ġ( night Theme Enabled ) Ġnight Theme Ġelse Ġregular Theme Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( if Ġ( night Theme Enabled ) Ġaccent Color Night Ġelse Ġaccent Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ@ formatter : off ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Pur ple ) ĠĠĠĠ Ġ-> Ġchoose Theme ( R . style . Pur ple Night Theme , ĠĠĠĠ ĠR . style . Pur ple Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent In digo ) ĠĠĠĠ Ġ-> Ġchoose Theme ( R . style . In digo Night Theme , ĠĠĠĠ ĠR . style . In digo Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Blue ) ĠĠĠĠĠĠ Ġ-> Ġchoose Theme ( R . style . Blue Night Theme , ĠĠĠĠĠĠ ĠR . style . Blue Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Light Blue ) Ġ Ġ-> Ġchoose Theme ( R . style . Light Blue Night Theme , Ġ ĠR . style . Light Blue Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent C yan ) ĠĠĠĠĠĠ Ġ-> Ġchoose Theme ( R . style . C yan Night Theme , ĠĠĠĠĠĠ ĠR . style . C yan Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Te al ) ĠĠĠĠĠĠ Ġ-> Ġchoose Theme ( R . style . Te al Night Theme , ĠĠĠĠĠĠ ĠR . style . Te al Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Green ) ĠĠĠĠĠ Ġ-> Ġchoose Theme ( R . style . Green Night Theme , ĠĠĠĠĠ ĠR . style . Green Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Light Green ) Ġ-> Ġchoose Theme ( R . style . Light Blue Night Theme , Ġ ĠR . style . Light Blue Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent L ime ) ĠĠĠĠĠĠ Ġ-> Ġchoose Theme ( R . style . L ime Night Theme , ĠĠĠĠĠĠ ĠR . style . L ime Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Yellow ) ĠĠĠĠ Ġ-> Ġchoose Theme ( R . style . Yellow Night Theme , ĠĠĠĠ ĠR . style . Yellow Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Am ber ) ĠĠĠĠĠ Ġ-> Ġchoose Theme ( R . style . Am ber Night Theme , ĠĠĠĠĠ ĠR . style . Am ber Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Orange ) ĠĠĠĠ Ġ-> Ġchoose Theme ( R . style . Orange Night Theme , ĠĠĠĠ ĠR . style . Orange Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Deep Orange ) Ġ-> Ġchoose Theme ( R . style . Deep Orange Night Theme , ĠR . style . Deep Orange Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . Accent Red ) ĠĠĠĠĠĠĠ Ġ-> Ġchoose Theme ( R . style . Red Night Theme , ĠĠĠĠĠĠĠ ĠR . style . Red Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġchoose Theme ( R . style . L ime Night Theme , ĠĠĠĠĠĠ ĠR . style . L ime Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ@ formatter : on ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġinvert Colors Ġby ĠPref ( prefs , ĠIN VERT _ COLORS , Ġtrue ) Ċ }