2019-06-29 13:37:21 +02:00
|
|
|
// @flow
|
|
|
|
|
2019-07-31 14:22:36 +02:00
|
|
|
import AsyncStorageManager from "./AsyncStorageManager";
|
2020-03-06 23:15:01 +01:00
|
|
|
// import {DarkTheme as NavDarkTheme, DefaultTheme as NavDefaultTheme} from '@react-navigation/native';
|
|
|
|
import {DarkTheme, DefaultTheme} from 'react-native-paper';
|
2019-06-29 13:37:21 +02:00
|
|
|
/**
|
|
|
|
* Singleton class used to manage themes
|
|
|
|
*/
|
2019-06-25 22:20:24 +02:00
|
|
|
export default class ThemeManager {
|
|
|
|
|
2019-06-29 13:37:21 +02:00
|
|
|
static instance: ThemeManager | null = null;
|
|
|
|
updateThemeCallback: Function;
|
2019-06-25 22:20:24 +02:00
|
|
|
|
|
|
|
constructor() {
|
2019-06-29 13:37:21 +02:00
|
|
|
this.updateThemeCallback = null;
|
2019-06-25 22:20:24 +02:00
|
|
|
}
|
|
|
|
|
2020-03-06 23:15:01 +01:00
|
|
|
static getWhiteTheme() {
|
|
|
|
return {
|
|
|
|
...DefaultTheme,
|
|
|
|
colors: {
|
|
|
|
...DefaultTheme.colors,
|
|
|
|
primary: '#be1522',
|
|
|
|
accent: '#be1522',
|
|
|
|
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: "rgba(54,165,22,0.31)",
|
|
|
|
proxiwashReadyColor: "transparent",
|
|
|
|
proxiwashRunningColor: "rgba(94,104,241,0.3)",
|
|
|
|
proxiwashBrokenColor: "rgba(162,162,162,0.31)",
|
|
|
|
proxiwashErrorColor: "rgba(204,7,0,0.31)",
|
|
|
|
|
|
|
|
// Screens
|
|
|
|
planningColor: '#d9b10a',
|
|
|
|
proximoColor: '#ec5904',
|
|
|
|
proxiwashColor: '#1fa5ee',
|
|
|
|
menuColor: '#e91314',
|
|
|
|
tutorinsaColor: '#f93943',
|
|
|
|
},
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
static getDarkTheme() {
|
|
|
|
return {
|
|
|
|
...DarkTheme,
|
|
|
|
colors: {
|
|
|
|
...DarkTheme.colors,
|
|
|
|
primary: '#be1522',
|
|
|
|
accent: '#be1522',
|
|
|
|
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: "rgba(17,149,32,0.53)",
|
|
|
|
proxiwashReadyColor: "transparent",
|
|
|
|
proxiwashRunningColor: "rgba(29,59,175,0.65)",
|
|
|
|
proxiwashBrokenColor: "#000000",
|
|
|
|
proxiwashErrorColor: "rgba(213,8,0,0.57)",
|
|
|
|
|
|
|
|
// Screens
|
|
|
|
planningColor: '#d99e09',
|
|
|
|
proximoColor: '#ec5904',
|
|
|
|
proxiwashColor: '#1fa5ee',
|
|
|
|
menuColor: '#b81213',
|
|
|
|
tutorinsaColor: '#f93943',
|
|
|
|
},
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2019-06-29 13:37:21 +02:00
|
|
|
/**
|
|
|
|
* 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
|
|
|
}
|
|
|
|
|
2019-06-29 13:37:21 +02:00
|
|
|
/**
|
|
|
|
* @returns {boolean} Night mode state
|
|
|
|
*/
|
2019-07-31 14:22:36 +02:00
|
|
|
static getNightMode(): boolean {
|
|
|
|
return AsyncStorageManager.getInstance().preferences.nightMode.current === '1';
|
2019-06-25 22:20:24 +02:00
|
|
|
}
|
|
|
|
|
2019-06-29 13:37:21 +02:00
|
|
|
/**
|
|
|
|
* Get the current theme based on night mode
|
|
|
|
* @returns {Object}
|
|
|
|
*/
|
2019-07-31 14:22:36 +02:00
|
|
|
static getCurrentTheme(): Object {
|
|
|
|
if (ThemeManager.getNightMode())
|
2020-03-06 23:15:01 +01:00
|
|
|
return ThemeManager.getDarkTheme();
|
2019-06-25 22:20:24 +02:00
|
|
|
else
|
2020-03-06 23:15:01 +01:00
|
|
|
return ThemeManager.getWhiteTheme();
|
2019-06-25 22:20:24 +02:00
|
|
|
}
|
|
|
|
|
2019-06-29 13:37:21 +02:00
|
|
|
/**
|
|
|
|
* Get the variables contained in the current theme
|
|
|
|
* @returns {Object}
|
|
|
|
*/
|
2019-07-31 14:22:36 +02:00
|
|
|
static getCurrentThemeVariables(): Object {
|
2020-03-06 23:15:01 +01:00
|
|
|
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
|
|
|
};
|