/* Ċ Ġ* Ġ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 . platform Ċ Ċ class ĠTheme Monitor Impl ( ĊĠĠĠ Ġprivate Ġval Ġmonitor Service : ĠTheme Monitor Service , ĊĠĠĠ Ġprivate Ġval Ġon Theme Change : ĠTheme Callback Ċ ) Ġ: ĠTheme Monitor Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġstate : ĠMonitor State Ġ= ĠMonitor State () ĊĠĠĠ Ġprivate Ġvar Ġlistener Handle : ĠNative Pointer ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġvar Ġrunning : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ== Ġvalue ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( monitor Service . is Supported ) Ġ{ Ġ" Monitoring Ġis Ġnot Ġsupported ." Ġ} ĊĠĠĠĠĠĠĠ Ġmonitor Service . install () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Notification ( force Change : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠnewState Ġ= Ġmonitor Service . getState () ĊĠĠĠĠĠĠĠ Ġval Ġhas Changed Ġ= Ġstate Ġ!= ĠnewState ĊĠĠĠĠĠĠĠ ĠLOGGER . info (" Received Ġnotification . Ġchanged =$ has Changed , Ġold State =$ state , ĠnewState =$ newState ") ĊĠĠĠĠĠĠĠ Ġif Ġ( has Changed Ġ|| Ġforce Change ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠnewState ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Theme Change . theme Changed ( state . dark , Ġstate . high Contrast ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequest Update () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Notification ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġlistener Handle Ġ= Ġmonitor Service . create EventHandler Ġ{ Ġon Notification () Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( listener Handle Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . error (" Could Ġnot Ġcreate Ġnotification Ġlistener . ĠMonitoring Ġwill Ġnot Ġbe Ġstarted ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstate Ġ= Ġmonitor Service . getState () ĊĠĠĠĠĠĠĠ Ġon Theme Change . theme Changed ( state . dark , Ġstate . high Contrast ) ĊĠĠĠĠĠĠĠ ĠLOGGER . info (" Started Ġtheme Ġmonitoring .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ ĠLOGGER . info (" Stopped Ġtheme Ġmonitoring .") ĊĠĠĠĠĠĠĠ Ġlistener Handle ?. let Ġ{ Ġmonitor Service . delete EventHandler ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= ĠPlugin Logger < Theme Monitor Impl >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠTheme Monitor Service . getState (): ĠMonitor State Ġ= ĠMonitor State ( is Dark Theme Enabled , Ġis High Contrast Enabled ) ĊĊĠĠĠ Ġdata Ġclass ĠMonitor State ( val Ġdark : ĠBoolean Ġ= Ġfalse , Ġval Ġhigh Contrast : ĠBoolean Ġ= Ġfalse ) Ċ } Ċ