
org.cryptomator.windows.uiappearance.WinUiAppearanceProvider Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of integrations-win Show documentation
Show all versions of integrations-win Show documentation
Provides optional Windows services used by Cryptomator
The newest version!
package org.cryptomator.windows.uiappearance;
import org.cryptomator.integrations.common.OperatingSystem;
import org.cryptomator.integrations.common.Priority;
import org.cryptomator.integrations.uiappearance.Theme;
import org.cryptomator.integrations.uiappearance.UiAppearanceListener;
import org.cryptomator.integrations.uiappearance.UiAppearanceProvider;
import java.util.ArrayList;
import java.util.Collection;
@Priority(1000)
@OperatingSystem(OperatingSystem.Value.WINDOWS)
public class WinUiAppearanceProvider implements UiAppearanceProvider {
private final WinAppearance winAppearance;
private final Collection registeredListeners;
private volatile Thread appearanceObserver;
public WinUiAppearanceProvider() {
this.winAppearance = new WinAppearance();
this.registeredListeners = new ArrayList<>();
}
@Override
public Theme getSystemTheme() {
return winAppearance.getSystemTheme();
}
@Override
public void adjustToTheme(Theme theme) {
// no-op
}
@Override
public synchronized void addListener(UiAppearanceListener listener) {
var wasEmpty = registeredListeners.isEmpty();
registeredListeners.add(listener);
if (wasEmpty) {
assert this.appearanceObserver == null;
this.appearanceObserver = winAppearance.startObserving(this::systemAppearanceChanged);
}
}
@Override
public synchronized void removeListener(UiAppearanceListener listener) {
registeredListeners.remove(listener);
if (appearanceObserver != null && registeredListeners.isEmpty()) {
this.appearanceObserver.interrupt();
this.appearanceObserver = null;
}
}
// notification hub called from single observer
private void systemAppearanceChanged(Theme theme) {
for (var listener : registeredListeners) {
listener.systemAppearanceChanged(theme);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy