/******************************************************************************* * Copyright (C) 2015 Connor Lanigan (email: dev@connorlanigan.com) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. *******************************************************************************/ package de.norvos.account; import java.util.Locale; import org.whispersystems.libaxolotl.IdentityKeyPair; import de.norvos.i18n.AvailableLanguage; /** * Allows access to user settings. * * @author Connor Lanigan */ public class SettingsService { private enum Setting { IDENTITYKEYPAIR("identity_keypair"), INSTALLID("install_id"), LOCALE("locale"), LOCALREGISTRATIONID("local_registration_id"), PASSWORD("password"), SERVERURL("server_url"), SETUPFINISHED("setup_finished"), SIGNALINGKEY("signaling_key"), USERNAME("username"); private final String key; Setting(final String key) { this.key = key; } @Override public String toString() { return key; } } synchronized private static byte[] getBinarySetting(final Setting setting) { return AccountDataStore.getBinaryValue(setting.toString()); } public static byte[] getIdentityKeyPair() { return getBinarySetting(Setting.IDENTITYKEYPAIR); } public static int getInstallID() { return Integer.valueOf(getStringSetting(Setting.INSTALLID)); } public static AvailableLanguage getLanguage() { try { final String languageTag = getStringSetting(Setting.LOCALE); return AvailableLanguage.forLocaleLanguage(Locale.forLanguageTag(languageTag)); } catch (final Exception e) { return null; } } public static int getLocalRegistrationId() { return Integer.valueOf(getStringSetting(Setting.LOCALREGISTRATIONID)); } public static String getPassword() { return getStringSetting(Setting.PASSWORD); } public static String getSignalingKey() { return getStringSetting(Setting.SIGNALINGKEY); } synchronized private static String getStringSetting(final Setting setting) { return AccountDataStore.getStringValue(setting.toString()); } public static String getURL() { return getStringSetting(Setting.SERVERURL); } public static String getUsername() { return getStringSetting(Setting.USERNAME); } public static boolean isSetupFinished() { return Boolean.valueOf(getStringSetting(Setting.SETUPFINISHED)); } public static void setIdentityKeyPair(final IdentityKeyPair keyPair) { setSetting(Setting.IDENTITYKEYPAIR, keyPair.serialize()); } public static void setInstallID(final int installID) { setSetting(Setting.INSTALLID, String.valueOf(installID)); } public static void setLanguage(final AvailableLanguage language) { setSetting(Setting.LOCALE, language.getLocale().toLanguageTag()); } public static void setLocalRegistrationId(final int id) { setSetting(Setting.LOCALREGISTRATIONID, String.valueOf(id)); } public static void setPassword(final String password) { setSetting(Setting.PASSWORD, password); } synchronized private static void setSetting(final Setting setting, final byte[] value) { AccountDataStore.storeBinaryValue(setting.toString(), value); } synchronized private static void setSetting(final Setting setting, final String value) { AccountDataStore.storeStringValue(setting.toString(), value); } public static void setSetupFinished(final boolean finished) { setSetting(Setting.SETUPFINISHED, String.valueOf(finished)); } public static void setSignalingKey(final String signalingKey) { setSetting(Setting.SIGNALINGKEY, signalingKey); } public static void setURL(final String url) { setSetting(Setting.SERVERURL, url); } public static void setUsername(final String username) { setSetting(Setting.USERNAME, username); } }