application-amicale/utils/ThemeManager.js

181 lines
5.4 KiB
JavaScript
Raw Normal View History

// @flow
import AsyncStorageManager from "./AsyncStorageManager";
import {DarkTheme, DefaultTheme} from 'react-native-paper';
2020-03-08 12:50:18 +01:00
import AprilFoolsManager from "./AprilFoolsManager";
/**
* Singleton class used to manage themes
*/
2019-06-25 22:20:24 +02:00
export default class ThemeManager {
static instance: ThemeManager | null = null;
updateThemeCallback: Function;
2019-06-25 22:20:24 +02:00
constructor() {
this.updateThemeCallback = null;
2019-06-25 22:20:24 +02:00
}
static getWhiteTheme() {
return {
...DefaultTheme,
colors: {
...DefaultTheme.colors,
primary: '#be1522',
accent: '#be1522',
2020-03-08 11:17:47 +01:00
tabIcon: "#929292",
card: "rgb(255, 255, 255)",
dividerBackground: '#e2e2e2',
textDisabled: '#c1c1c1',
icon: '#5d5d5d',
success: "#5cb85c",
warning: "#f0ad4e",
danger: "#d9534f",
// Calendar/Agenda
agendaBackgroundColor: '#f3f3f4',
agendaDayTextColor: '#636363',
// PROXIWASH
proxiwashFinishedColor: "#a5dc9d",
proxiwashReadyColor: "transparent",
proxiwashRunningColor: "#a0ceff",
proxiwashRunningBgColor: "#c7e3ff",
proxiwashBrokenColor: "#8e8e8e",
proxiwashErrorColor: "rgba(204,7,0,0.31)#e35f57",
// Screens
planningColor: '#d9b10a',
proximoColor: '#ec5904',
proxiwashColor: '#1fa5ee',
menuColor: '#e91314',
tutorinsaColor: '#f93943',
},
};
}
static getDarkTheme() {
return {
...DarkTheme,
colors: {
...DarkTheme.colors,
primary: '#be1522',
accent: '#be1522',
2020-03-08 11:17:47 +01:00
tabBackground: "#181818",
tabIcon: "#6d6d6d",
card: "rgb(18, 18, 18)",
dividerBackground: '#222222',
textDisabled: '#5b5b5b',
icon: '#b3b3b3',
success: "#5cb85c",
warning: "#f0ad4e",
danger: "#d9534f",
// Calendar/Agenda
agendaBackgroundColor: '#171717',
agendaDayTextColor: '#6d6d6d',
// PROXIWASH
proxiwashFinishedColor: "#31682c",
proxiwashReadyColor: "transparent",
proxiwashRunningColor: "#213c79",
proxiwashRunningBgColor: "#1a2033",
proxiwashBrokenColor: "#656565",
proxiwashErrorColor: "#7e2e2f",
// Screens
planningColor: '#d99e09',
proximoColor: '#ec5904',
proxiwashColor: '#1fa5ee',
menuColor: '#b81213',
tutorinsaColor: '#f93943',
},
};
}
2020-03-08 12:50:18 +01:00
static getAprilFoolsTheme() {
return {
...ThemeManager.getBaseTheme(),
colors: {
...ThemeManager.getBaseTheme().colors,
primary: '#bebe03',
accent: '#bebe03',
background: '#5b3e02',
tabBackground: "#5b3e02",
card: "#5b3e02",
surface: "#5b3e02",
dividerBackground: '#362201',
textDisabled: '#b9b9b9',
// Calendar/Agenda
agendaBackgroundColor: '#5b3e02',
agendaDayTextColor: '#6d6d6d',
},
};
}
/**
* Get this class instance or create one if none is found
* @returns {ThemeManager}
*/
static getInstance(): ThemeManager {
return ThemeManager.instance === null ?
ThemeManager.instance = new ThemeManager() :
ThemeManager.instance;
2019-06-25 22:20:24 +02:00
}
/**
* @returns {boolean} Night mode state
*/
static getNightMode(): boolean {
return AsyncStorageManager.getInstance().preferences.nightMode.current === '1';
2019-06-25 22:20:24 +02:00
}
/**
* Get the current theme based on night mode
* @returns {Object}
*/
static getCurrentTheme(): Object {
2020-03-08 12:50:18 +01:00
if (AprilFoolsManager.getInstance().isAprilFoolsEnabled())
return ThemeManager.getAprilFoolsTheme();
else
2020-03-08 13:26:14 +01:00
return ThemeManager.getBaseTheme()
2020-03-08 12:50:18 +01:00
}
static getBaseTheme() {
if (ThemeManager.getNightMode())
return ThemeManager.getDarkTheme();
2019-06-25 22:20:24 +02:00
else
return ThemeManager.getWhiteTheme();
2019-06-25 22:20:24 +02:00
}
/**
* Get the variables contained in the current theme
* @returns {Object}
*/
static getCurrentThemeVariables(): Object {
return ThemeManager.getCurrentTheme().colors;
}
/**
* Set the function to be called when the theme is changed (allows for general reload of the app)
* @param callback Function to call after theme change
*/
setUpdateThemeCallback(callback: ?Function) {
this.updateThemeCallback = callback;
}
/**
* Set night mode and save it to preferences
*
* @param isNightMode Whether to enable night mode
*/
setNightMode(isNightMode: boolean) {
let nightModeKey = AsyncStorageManager.getInstance().preferences.nightMode.key;
AsyncStorageManager.getInstance().savePref(nightModeKey, isNightMode ? '1' : '0');
if (this.updateThemeCallback !== null)
this.updateThemeCallback();
2019-06-28 11:35:15 +02:00
}
2019-06-25 22:20:24 +02:00
};