/*
* Copyright (c) 2015, Nils Braden
*
* This file is part of ttrss-reader-fork. This program is free software; you
* can redistribute it and/or modify it under the terms of the GNU
* 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
* General Public License for more details. You should have received a
* copy of the GNU General Public License along with this program; If
* not, see http://www.gnu.org/licenses/.
*/
package org.ttrssreader.preferences;
import android.content.SharedPreferences;
import org.ttrssreader.utils.Utils;
import java.lang.reflect.Field;
import java.util.Locale;
public class Constants {
public static final String EMPTY = "";
public static final String APPENDED_DEFAULT = "_DEFAULT";
// Connection
public static final String URL = "ConnectionUrlPreference";
public static final String USERNAME = "ConnectionUsernamePreference";
public static final String PASSWORD = "ConnectionPasswordPreference";
public static final String USE_HTTP_AUTH = "ConnectionHttpPreference";
public static final String HTTP_USERNAME = "ConnectionHttpUsernamePreference";
public static final String HTTP_PASSWORD = "ConnectionHttpPasswordPreference";
public static final String USE_PROVIDER_INSTALLER = "ConnectionProviderInstall";
public static final String TRUST_ALL_SSL = "ConnectionSSLPreference";
public static final String TRUST_ALL_HOSTS = "ConnectionTrustHostsPreference";
public static final String USE_KEYSTORE = "ConnectionUseKeystorePreference";
public static final String KEYSTORE_PASSWORD = "ConnectionKeystorePasswordPreference";
public static final String USE_OF_A_LAZY_SERVER = "ConnectionLazyServerPreference";
public static final String IGNORE_UNSAFE_CONNECTION_ERROR = "IgnoreUnsafeConnectionError";
// Connection Default Values
public static final String URL_DEFAULT = "https://localhost/";
public static final boolean USE_HTTP_AUTH_DEFAULT = false;
public static final boolean USE_PROVIDER_INSTALLER_DEFAULT = true;
public static final boolean TRUST_ALL_SSL_DEFAULT = false;
public static final boolean TRUST_ALL_HOSTS_DEFAULT = false;
public static final boolean USE_KEYSTORE_DEFAULT = false;
public static final boolean USE_OF_A_LAZY_SERVER_DEFAULT = false;
public static final boolean IGNORE_UNSAFE_CONNECTION_ERROR_DEFAULT = false;
// Usage
public static final String OPEN_URL_EMPTY_ARTICLE = "UsageOpenUrlEmptyArticlePreference";
public static final String USE_VOLUME_KEYS = "UsageUseVolumeKeysPreference";
public static final String LOAD_IMAGES = "DisplayLoadImagesPreference";
public static final String INVERT_BROWSING = "InvertBrowseArticlesPreference";
public static final String WORK_OFFLINE = "UsageWorkOfflinePreference";
public static final String GO_BACK_AFTER_MARK_ALL_READ = "GoBackAfterMarkAllReadPreference";
public static final String HIDE_ACTIONBAR = "HideActionbarPreference";
public static final String ALLOW_TABLET_LAYOUT = "AllowTabletLayoutPreference";
public static final String HIDE_FEED_READ_BUTTONS = "HideFeedReadButtons";
// Usage Default Values
public static final boolean OPEN_URL_EMPTY_ARTICLE_DEFAULT = false;
public static final boolean USE_VOLUME_KEYS_DEFAULT = false;
public static final boolean LOAD_IMAGES_DEFAULT = true;
public static final boolean INVERT_BROWSING_DEFAULT = false;
public static final boolean WORK_OFFLINE_DEFAULT = false;
public static final boolean GO_BACK_AFTER_MARK_ALL_READ_DEFAULT = false;
public static final boolean HIDE_ACTIONBAR_DEFAULT = true;
public static final boolean ALLOW_TABLET_LAYOUT_DEFAULT = true;
public static final boolean HIDE_FEED_READ_BUTTONS_DEFAULT = false;
// Display
public static final String THEME = "DisplayThemePreference";
public static final String ANIMATIONS = "DisplayAnimationsPreference";
public static final String TEXT_ZOOM = "TextZoomPreference";
public static final String SUPPORT_ZOOM_CONTROLS = "SupportZoomControlsPreference";
public static final String ALLOW_HYPHENATION = "AllowHyphenationPreference";
public static final String HYPHENATION_LANGUAGE = "HyphenationLanguagePreference";
public static final String SHOW_VIRTUAL = "DisplayShowVirtualPreference";
public static final String SHOW_BUTTONS_MODE = "ShowButtonsModePreference";
public static final String ONLY_UNREAD = "DisplayShowUnreadOnlyPreference";
public static final String ONLY_CACHED_IMAGES = "DisplayShowCachedImagesPreference";
public static final String INVERT_SORT_ARTICLELIST = "InvertSortArticlelistPreference";
public static final String INVERT_SORT_FEEDSCATS = "InvertSortFeedscatsPreference";
public static final String ALIGN_FLUSH_LEFT = "DisplayAlignFlushLeftPreference";
public static final String DATE_TIME_SYSTEM = "DisplayDateTimeFormatSystemPreference";
public static final String DATE_STRING = "DisplayDateFormatPreference";
public static final String TIME_STRING = "DisplayTimeFormatPreference";
public static final String DATE_TIME_STRING = "DisplayDateTimeFormatPreference";
// Display Default Values
public static final String THEME_DEFAULT = "1";
public static final boolean ANIMATIONS_DEFAULT = true;
public static final int TEXT_ZOOM_DEFAULT = 100;
public static final boolean SUPPORT_ZOOM_CONTROLS_DEFAULT = true;
public static final boolean ALLOW_HYPHENATION_DEFAULT = false;
public static final String HYPHENATION_LANGUAGE_DEFAULT = "en-gb";
public static final boolean SHOW_VIRTUAL_DEFAULT = true;
public static final String SHOW_BUTTONS_MODE_DEFAULT = "0";
public static final int SHOW_BUTTONS_MODE_ALLWAYS = 1;
public static final int SHOW_BUTTONS_MODE_HTML = 2;
public static final boolean ONLY_UNREAD_DEFAULT = false;
public static final boolean ONLY_CACHED_IMAGES_DEFAULT = false;
public static final boolean INVERT_SORT_ARTICLELIST_DEFAULT = false;
public static final boolean INVERT_SORT_FEEDSCATS_DEFAULT = false;
public static final boolean ALIGN_FLUSH_LEFT_DEFAULT = false;
public static final boolean DATE_TIME_SYSTEM_DEFAULT = true;
public static final String DATE_STRING_DEFAULT = "dd.MM.yyyy";
public static final String TIME_STRING_DEFAULT = "kk:mm";
public static final String DATE_TIME_STRING_DEFAULT = "dd.MM.yyyy kk:mm";
// System
public static final String SAVE_ATTACHMENT = "SaveAttachmentPreference";
public static final String CACHE_FOLDER = "CacheFolderPreference";
public static final String CACHE_FOLDER_MAX_SIZE = "CacheFolderMaxSizePreference";
public static final String CACHE_IMAGE_MAX_SIZE = "CacheImageMaxSizePreference";
public static final String CACHE_IMAGE_MIN_SIZE = "CacheImageMinSizePreference";
public static final String DELETE_DB_SCHEDULED = "DeleteDBScheduledPreference";
public static final String CACHE_IMAGES_ON_STARTUP = "CacheImagesOnStartupPreference";
public static final String CACHE_IMAGES_ONLY_WIFI = "CacheImagesOnlyWifiPreference";
public static final String ONLY_USE_WIFI = "OnlyUseWifiPreference";
public static final String NO_CRASHREPORTS = "NoCrashreportsPreference";
public static final String NO_CRASHREPORTS_UNTIL_UPDATE = "NoCrashreportsUntilUpdatePreference";
public static final String IS_FIRST_RUN = "IsFirstRun";
// System Default Values
public static final Integer CACHE_FOLDER_MAX_SIZE_DEFAULT = 80;
public static final Integer CACHE_IMAGE_MAX_SIZE_DEFAULT = 6 * (int) Utils.MB; // 6 MB
public static final Integer CACHE_IMAGE_MIN_SIZE_DEFAULT = 32 * (int) Utils.KB; // 64 KB
public static final boolean DELETE_DB_SCHEDULED_DEFAULT = false;
public static final boolean CACHE_IMAGES_ON_STARTUP_DEFAULT = false;
public static final boolean CACHE_IMAGES_ONLY_WIFI_DEFAULT = false;
public static final boolean ONLY_USE_WIFI_DEFAULT = false;
public static final boolean NO_CRASHREPORTS_DEFAULT = false;
public static final boolean NO_CRASHREPORTS_UNTIL_UPDATE_DEFAULT = false;
public static final boolean IS_FIRST_RUN_DEFAULT = true;
// Internal
public static final String APP_VERSION_CHECK_TIME = "appVersionCheckTime";
public static final String APP_LATEST_VERSION = "appLatestVersion";
public static final String LAST_VERSION_RUN = "LastVersionRun";
public static final String FRESH_ARTICLE_MAX_AGE = "freshArticleMaxAge";
public static final String FRESH_ARTICLE_MAX_AGE_DATE = "freshArticleMaxAgeDate";
public static final String SINCE_ID = "sinceId";
public static final String LAST_SYNC = "lastSync";
public static final String LAST_CLEANUP = "lastCleanup";
public static final String ENABLE_WIFI_BASED_SUFFIX = "_pref_enable_wifibased";
// Internal Default Values
public static final long APP_VERSION_CHECK_TIME_DEFAULT = 0;
public static final int APP_LATEST_VERSION_DEFAULT = 0;
public static final String LAST_VERSION_RUN_DEFAULT = "1";
public static final long FRESH_ARTICLE_MAX_AGE_DEFAULT = Utils.DAY;
public static final long FRESH_ARTICLE_MAX_AGE_DATE_DEFAULT = 0;
public static final int SINCE_ID_DEFAULT = 0;
public static final long LAST_SYNC_DEFAULT = 0;
public static final long LAST_CLEANUP_DEFAULT = 0;
public static final int ACTIVITY_SHOW_PREFERENCES = 43;
/*
* Resets all preferences to their default values. Only preferences which are mentioned in this class are reset,
* old
* or unsused values don't get reset.
*/
public static void resetPreferences(SharedPreferences prefs) {
SharedPreferences.Editor editor = prefs.edit();
// Iterate over all fields
for (Field field : Constants.class.getDeclaredFields()) {
// Continue on "_DEFAULT"-Fields, these hold only the default values for a preference
if (field.getName().endsWith(APPENDED_DEFAULT)) continue;
try {
// Get the default value
Field fieldDefault = Constants.class.getDeclaredField(field.getName() + APPENDED_DEFAULT);
String value = (String) field.get(new Constants());
// Get the default type and store value for the specific type
String type = fieldDefault.getType().getSimpleName();
switch (type) {
case "String": {
String defaultValue = (String) fieldDefault.get(null);
editor.putString(value, defaultValue);
}
case "boolean": {
boolean defaultValue = fieldDefault.getBoolean(null);
editor.putBoolean(value, defaultValue);
}
case "int": {
int defaultValue = fieldDefault.getInt(null);
editor.putInt(value, defaultValue);
}
case "long": {
long defaultValue = fieldDefault.getLong(null);
editor.putLong(value, defaultValue);
}
}
} catch (SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
// Ignore, occurrs if a search for field like EMPTY_DEFAULT is started,
// this isn't there and shall never
// be there.
}
}
// Commit when finished
editor.apply();
}
public static String constant2Var(String s) {
String[] parts = s.split("_");
String camelCaseString = "";
for (String part : parts) {
camelCaseString = camelCaseString + toProperCase(part);
}
// We want the String to starrt with a lower-case letter...
return camelCaseString.substring(0, 1).toLowerCase(Locale.getDefault()) + camelCaseString.substring(1);
}
private static String toProperCase(String s) {
return s.substring(0, 1).toUpperCase(Locale.getDefault()) + s.substring(1).toLowerCase(Locale.getDefault());
}
}