/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠJ ann is ĠWe is Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ* Ċ Ġ*/ Ċ package Ġcom . github . weis j . dark mode Ċ Ċ import Ġcom . github . weis j . dark mode . platform .* Ċ import Ġcom . github . weis j . dark mode . platform . settings . if Present Ċ import Ġcom . github . weis j . dark mode . platform . settings . let Value Ċ import Ġcom . intellij . ide . actions . Quick Change Look And Feel Ċ import Ġcom . intellij . ide . ui . L af Manager Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . components . Service Manager Ċ import Ġcom . intellij . openapi . editor . colors . Editor Colors Manager Ċ import Ġcom . intellij . openapi . editor . colors . Editor Colors Scheme Ċ import Ġcom . intellij . openapi . util . registry . Registry Ċ import Ġcom . intellij . util . Alarm Ċ import Ġjavax . swing . UI Manager . Look And Feel Info Ċ Ċ /** Ċ Ġ* ĠAutomatically Ġchanges Ġthe ĠIDEA Ġtheme Ġbased Ġon Ġsystem Ġsettings . Ċ Ġ*/ Ċ class ĠAuto Dark Mode Ġ: ĠDis posable , ĠTheme Callback Ġ{ ĊĠĠĠ Ġprivate Ġval Ġalarm Ġ= ĠAlarm ( Alarm . Thread ToUse . SW ING _ THREAD , Ġthis ) ĊĠĠĠ Ġprivate Ġval Ġmonitor Ġ= Ġlazy Ġ{ Ġcreate Monitor () Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Monitor (): ĠTheme Monitor Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= ĠService Manager . getService ( Theme Monitor Service :: class . java ) ĊĠĠĠĠĠĠĠ ĠTheme Monitor Impl ( service , Ġthis ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalStateException ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLOGGER . error ( e ) ĊĠĠĠĠĠĠĠ ĠNull Monitor () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġmonitor . let Value Ġ{ Ġit . running Ġ= Ġtrue Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġmonitor . if Present Ġ{ Ġit . running Ġ= Ġfalse Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Settings Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġmonitor . let Value Ġ{ Ġit . request Update () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtheme Changed ( is Dark : ĠBoolean , Ġis High Contrast : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( l af Target , Ġcolor Scheme Target ) Ġ= Ġget Target L af ( is Dark , Ġis High Contrast ) ĊĠĠĠĠĠĠĠ Ġreset Requests () ĊĠĠĠĠĠĠĠ Ġif Ġ( General Theme Settings . change Ide Theme Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl af Target Ġ!= ĠL af Manager . getInstance (). current Look And Feel ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate L af ( l af Target ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( General Theme Settings . change Editor Theme Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Scheme Target Ġ!= ĠEditor Colors Manager . getInstance (). global Scheme ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Editor Scheme ( color Scheme Target ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Target L af ( dark : ĠBoolean , Ġhigh Contrast : ĠBoolean ): ĠPair < Look And Feel Info , ĠEditor Colors Scheme > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGeneral Theme Settings . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhigh Contrast Ġ&& Ġcheck High Contrast Ġ-> ĠPair ( high Contrast Theme , Ġhigh Contrast Code Scheme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdark Ġ-> ĠPair ( dark Theme , Ġdark Code Scheme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠPair ( light Theme , Ġlight Code Scheme ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate L af ( target L af : ĠLook And Feel Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġschedule Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQuick Change Look And Feel . switch L af AndUpdate UI ( L af Manager . getInstance (), Ġtarget L af , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Editor Scheme ( colors Scheme : ĠEditor Colors Scheme ) Ġ{ ĊĠĠĠĠĠĠĠ Ġschedule Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEditor Colors Manager . getInstance (). global Scheme Ġ= Ġcolors Scheme ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Requests () Ġ{ ĊĠĠĠĠĠĠĠ Ġalarm . cancel All Requests () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġschedule Request ( run nable : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġalarm . add Request ( run nable , ĠRegistry . intValue ( INST ANT _ DELAY _ KEY , Ġ 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġplugin Un loaded () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġplugin Loaded () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠINST ANT _ DELAY _ KEY Ġ= Ġ" ide . instant . theme . switch . delay " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= ĠPlugin Logger < Auto Dark Mode >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠOPTIONS Ġ= ĠService Manager . getService ( Auto Dark Mode Options :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOPTIONS . settings Loaded () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ