This repository has been archived on 2021-12-05. You can view files and clone it, but cannot push or open issues or pull requests.
envoy/src/main/java/envoy/client/Settings.java

157 lines
4.4 KiB
Java
Raw Normal View History

package envoy.client;
import java.awt.Color;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.prefs.Preferences;
import envoy.client.ui.Theme;
/**
* Project: <strong>envoy-client</strong><br>
* File: <strong>Settings.java</strong><br>
* Created: <strong>11 Nov 2019</strong><br>
*
* @author Leon Hofmeister
* @author Maximilian K&auml;fer
* @author Kai S. K. Engelbart
* @since Envoy v0.2-alpha
*/
public class Settings {
// Actual settings accessible by the rest of the application
private String username;
private String email;
private boolean enterToSend = true;
private Map<String, Theme> themes;
private String currentTheme;
/**
* Required to save the settings.
*/
private Preferences prefs = Preferences.userNodeForPackage(Settings.class);
/**
* User-defined themes are stored inside this file.
*/
private File themeFile = new File("themes.ser");
/**
* Singleton instance of this class.
*/
private static Settings settings = new Settings();
/**
* The way to instantiate the settings.
* Is set to private to deny other instances of that object.
*
* @since Envoy v0.2-alpha
*/
private Settings() { load(); }
/**
* This method is used to ensure that there is only one instance of Settings.
*
* @return the instance of Settings
* @since Envoy v0.2-alpha
*/
public static Settings getInstance() { return settings; }
@SuppressWarnings("unchecked")
private void load() {
setUsername(prefs.get("username", ""));
setEmail(prefs.get("email", ""));
setEnterToSend(prefs.getBoolean("enterToSend", true));
setCurrentTheme(prefs.get("theme", "dark"));
// Load themes from theme file
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(themeFile))) {
Object obj = in.readObject();
if(obj instanceof HashMap) themes = (Map<String, Theme>) obj;
} catch (IOException | ClassNotFoundException e) {
themes = new HashMap<>();
currentTheme = "dark";
e.printStackTrace();
}
// Load standard themes not defined in the themes file
themes.put("dark",
new Theme("dark", Color.black, Color.darkGray, Color.white, Color.blue, Color.white, Color.orange, Color.blue, Color.white,
Color.white));
themes.put("light",
new Theme("light", new Color(235, 235, 235), Color.white, Color.white, Color.darkGray, Color.black, Color.orange, Color.darkGray,
Color.black, Color.black));
}
public void save() throws IOException{
prefs.put("username", getUsername());
prefs.put("email", getEmail());
prefs.put("theme", currentTheme);
prefs.putBoolean("enterToSend", isEnterToSend());
// Save themes to theme file
themeFile.createNewFile();
try(ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(themeFile))) {
out.writeObject(themes);
}
}
public void addNewThemeToMap(Theme theme) {
settings.getThemes().put(theme.getThemeName(), theme);
currentTheme = theme.getThemeName();
}
public String getCurrentTheme() { return currentTheme; }
public void setCurrentTheme(String themeName) { currentTheme = themeName; }
/**
* @return the user name
* @since Envoy v0.2-alpha
*/
public String getUsername() { return username; }
/**
* @param username the user name to set
* @since Envoy v0.2-alpha
*/
public void setUsername(String username) { this.username = username; }
/**
* @return the email associated with that user.
* @since Envoy v0.2-alpha
*/
public String getEmail() { return email; }
/**
* @param email the email to set
* @since Envoy v0.2-alpha
*/
public void setEmail(String email) { this.email = email; }
/**
* @return true, if "enter" suffices to send a message, else it has to be "ctrl"
* + "enter"
* @since Envoy v0.2-alpha
*/
public boolean isEnterToSend() { return enterToSend; }
/**
* Change mode of posting a message via Keystroke.
*
* @param enterToSend if true, "enter" suffices to send a message, <br>
* else it has to be "ctrl" + "enter"
* @since Envoy v0.2-alpha
*/
public void setEnterToSend(boolean enterToSend) { this.enterToSend = enterToSend; }
public Map<String, Theme> getThemes() { return themes; }
public void setThemes(Map<String, Theme> themes) { this.themes = themes; }
}