Add theme enums and platformUtilsService helper (#497)
* Use enum for themes, add getEffectiveTheme * Update electron and cli to use theme refactor
This commit is contained in:
parent
91b73fa777
commit
ce71c0c0bd
|
@ -1,4 +1,5 @@
|
||||||
import { DeviceType } from '../enums/deviceType';
|
import { DeviceType } from '../enums/deviceType';
|
||||||
|
import { ThemeType } from '../enums/themeType';
|
||||||
|
|
||||||
export abstract class PlatformUtilsService {
|
export abstract class PlatformUtilsService {
|
||||||
identityClientId: string;
|
identityClientId: string;
|
||||||
|
@ -28,7 +29,8 @@ export abstract class PlatformUtilsService {
|
||||||
readFromClipboard: (options?: any) => Promise<string>;
|
readFromClipboard: (options?: any) => Promise<string>;
|
||||||
supportsBiometric: () => Promise<boolean>;
|
supportsBiometric: () => Promise<boolean>;
|
||||||
authenticateBiometric: () => Promise<boolean>;
|
authenticateBiometric: () => Promise<boolean>;
|
||||||
getDefaultSystemTheme: () => Promise<'light' | 'dark'>;
|
getDefaultSystemTheme: () => Promise<ThemeType.Light | ThemeType.Dark>;
|
||||||
onDefaultSystemThemeChange: (callback: ((theme: 'light' | 'dark') => unknown)) => unknown;
|
onDefaultSystemThemeChange: (callback: ((theme: ThemeType.Light | ThemeType.Dark) => unknown)) => unknown;
|
||||||
|
getEffectiveTheme: () => Promise<ThemeType>;
|
||||||
supportsSecureStorage: () => boolean;
|
supportsSecureStorage: () => boolean;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
export enum ThemeType {
|
||||||
|
System = 'system',
|
||||||
|
Light = 'light',
|
||||||
|
Dark = 'dark',
|
||||||
|
Nord = 'nord',
|
||||||
|
SolarizedDark = 'solarizedDark',
|
||||||
|
}
|
|
@ -3,6 +3,8 @@ import { promises as fs } from 'fs';
|
||||||
import { MessagingService } from 'jslib-common/abstractions/messaging.service';
|
import { MessagingService } from 'jslib-common/abstractions/messaging.service';
|
||||||
import { RendererMenuItem } from '../utils';
|
import { RendererMenuItem } from '../utils';
|
||||||
|
|
||||||
|
import { ThemeType } from 'jslib-common/enums/themeType';
|
||||||
|
|
||||||
import { WindowMain } from '../window.main';
|
import { WindowMain } from '../window.main';
|
||||||
|
|
||||||
export class ElectronMainMessagingService implements MessagingService {
|
export class ElectronMainMessagingService implements MessagingService {
|
||||||
|
@ -12,7 +14,7 @@ export class ElectronMainMessagingService implements MessagingService {
|
||||||
});
|
});
|
||||||
|
|
||||||
ipcMain.handle('systemTheme', () => {
|
ipcMain.handle('systemTheme', () => {
|
||||||
return nativeTheme.shouldUseDarkColors ? 'dark' : 'light';
|
return nativeTheme.shouldUseDarkColors ? ThemeType.Dark : ThemeType.Light;
|
||||||
});
|
});
|
||||||
|
|
||||||
ipcMain.handle('showMessageBox', (event, options) => {
|
ipcMain.handle('showMessageBox', (event, options) => {
|
||||||
|
@ -42,7 +44,7 @@ export class ElectronMainMessagingService implements MessagingService {
|
||||||
});
|
});
|
||||||
|
|
||||||
nativeTheme.on('updated', () => {
|
nativeTheme.on('updated', () => {
|
||||||
windowMain.win?.webContents.send('systemThemeUpdated', nativeTheme.shouldUseDarkColors ? 'dark' : 'light');
|
windowMain.win?.webContents.send('systemThemeUpdated', nativeTheme.shouldUseDarkColors ? ThemeType.Dark : ThemeType.Light);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,12 +10,15 @@ import {
|
||||||
} from '../utils';
|
} from '../utils';
|
||||||
|
|
||||||
import { DeviceType } from 'jslib-common/enums/deviceType';
|
import { DeviceType } from 'jslib-common/enums/deviceType';
|
||||||
|
import { ThemeType } from 'jslib-common/enums/themeType';
|
||||||
|
|
||||||
import { I18nService } from 'jslib-common/abstractions/i18n.service';
|
import { I18nService } from 'jslib-common/abstractions/i18n.service';
|
||||||
import { MessagingService } from 'jslib-common/abstractions/messaging.service';
|
import { MessagingService } from 'jslib-common/abstractions/messaging.service';
|
||||||
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
|
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
|
||||||
import { StorageService } from 'jslib-common/abstractions/storage.service';
|
import { StorageService } from 'jslib-common/abstractions/storage.service';
|
||||||
|
|
||||||
|
import { ConstantsService } from 'jslib-common/services/constants.service';
|
||||||
|
|
||||||
import { ElectronConstants } from '../electronConstants';
|
import { ElectronConstants } from '../electronConstants';
|
||||||
|
|
||||||
export class ElectronPlatformUtilsService implements PlatformUtilsService {
|
export class ElectronPlatformUtilsService implements PlatformUtilsService {
|
||||||
|
@ -192,8 +195,17 @@ export class ElectronPlatformUtilsService implements PlatformUtilsService {
|
||||||
return ipcRenderer.invoke('systemTheme');
|
return ipcRenderer.invoke('systemTheme');
|
||||||
}
|
}
|
||||||
|
|
||||||
onDefaultSystemThemeChange(callback: ((theme: 'light' | 'dark') => unknown)) {
|
onDefaultSystemThemeChange(callback: ((theme: ThemeType.Light | ThemeType.Dark) => unknown)) {
|
||||||
ipcRenderer.on('systemThemeUpdated', (event, theme: 'light' | 'dark') => callback(theme));
|
ipcRenderer.on('systemThemeUpdated', (event, theme: ThemeType.Light | ThemeType.Dark) => callback(theme));
|
||||||
|
}
|
||||||
|
|
||||||
|
async getEffectiveTheme() {
|
||||||
|
const theme = await this.storageService.get<ThemeType>(ConstantsService.themeKey);
|
||||||
|
if (theme == null || theme === ThemeType.System) {
|
||||||
|
return this.getDefaultSystemTheme();
|
||||||
|
} else {
|
||||||
|
return theme;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
supportsSecureStorage(): boolean {
|
supportsSecureStorage(): boolean {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import * as child_process from 'child_process';
|
import * as child_process from 'child_process';
|
||||||
|
|
||||||
import { DeviceType } from 'jslib-common/enums/deviceType';
|
import { DeviceType } from 'jslib-common/enums/deviceType';
|
||||||
|
import { ThemeType } from 'jslib-common/enums/themeType';
|
||||||
|
|
||||||
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
|
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
|
||||||
|
|
||||||
|
@ -135,13 +136,17 @@ export class CliPlatformUtilsService implements PlatformUtilsService {
|
||||||
}
|
}
|
||||||
|
|
||||||
getDefaultSystemTheme() {
|
getDefaultSystemTheme() {
|
||||||
return Promise.resolve('light' as 'light' | 'dark');
|
return Promise.resolve(ThemeType.Light as ThemeType.Light | ThemeType.Dark);
|
||||||
}
|
}
|
||||||
|
|
||||||
onDefaultSystemThemeChange() {
|
onDefaultSystemThemeChange() {
|
||||||
/* noop */
|
/* noop */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getEffectiveTheme() {
|
||||||
|
return Promise.resolve(ThemeType.Light);
|
||||||
|
}
|
||||||
|
|
||||||
supportsSecureStorage(): boolean {
|
supportsSecureStorage(): boolean {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue