package com.florianmski.tracktoid; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; import com.florianmski.tracktoid.utils.DateHelper; import org.joda.time.DateTime; public enum TraktoidPrefs { INSTANCE; private final String ACCESS_TOKEN = getKey("accessToken"); private final String USERNAME = getKey("username"); private final String LAST_SYNC_TIME = getKey("lastSyncTime"); private final String PREVIOUS_MIGRATION_VERSION_CODE = getKey("previousMigrationVersionCode"); private static SharedPreferences prefs; public static void create(Context context) { prefs = PreferenceManager.getDefaultSharedPreferences(context); } public boolean isUserLoggedIn() { return getAccessToken() != null; } public String getAccessToken() { return getString(ACCESS_TOKEN, null); } public void putAccessToken(String accessToken) { putString(ACCESS_TOKEN, accessToken); } public String getUsername() { return getString(USERNAME, null); } public void putUsername(String username) { putString(USERNAME, username); } public DateTime getLastSyncTime() { return DateHelper.get(getLong(LAST_SYNC_TIME, 0)); } public int refreshPreviousMigrationVersionCode() { int versionCode = BuildConfig.VERSION_CODE; putInt(PREVIOUS_MIGRATION_VERSION_CODE, versionCode); return versionCode; } public int getPreviousMigrationVersionCode() { // if the previous migration version code is absent, set it to the build config version code int previousMigrationversionCode = getInt(PREVIOUS_MIGRATION_VERSION_CODE, -1); if(previousMigrationversionCode == -1) previousMigrationversionCode = refreshPreviousMigrationVersionCode(); return previousMigrationversionCode; } public void putLastSyncTime(DateTime dateTime) { putLong(LAST_SYNC_TIME, dateTime.getMillis()); } private String getString(String key, String defValue) { return prefs.getString(key, defValue); } private boolean getBoolean(String key, boolean defValue) { return prefs.getBoolean(key, defValue); } private int getInt(String key, int defValue) { return prefs.getInt(key, defValue); } private long getLong(String key, long defValue) { return prefs.getLong(key, defValue); } private double getDouble(String key, double defValue) { return Double.longBitsToDouble(getLong(key, Double.doubleToLongBits(defValue))); } private double getDouble(String key, long defValue) { return Double.longBitsToDouble(getLong(key, defValue)); } private void putString(String key, String value) { prefs.edit().putString(key, value).apply(); } private void putBoolean(String key, boolean value) { prefs.edit().putBoolean(key, value).apply(); } private void putInt(String key, int value) { prefs.edit().putInt(key, value).apply(); } private void putLong(String key, long value) { prefs.edit().putLong(key, value).apply(); } private void putDouble(String key, double value) { putLong(key, Double.doubleToLongBits(value)); } public void clear() { prefs.edit().clear().apply(); } private String getKey(String key) { return String.format("%s.%s", BuildConfig.APPLICATION_ID, key); } }