package com.artemzin.qualitymatters.developer_settings;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import okhttp3.logging.HttpLoggingInterceptor;
import timber.log.Timber;
/**
* Wrapper over {@link android.content.SharedPreferences} to store developer settings.
*/
public class DeveloperSettings {
private static final String KEY_IS_STETHO_ENABLED = "is_stetho_enabled";
private static final String KEY_IS_LEAK_CANARY_ENABLED = "is_leak_canary_enabled";
private static final String KEY_IS_TINY_DANCER_ENABLED = "is_tiny_dancer_enabled";
private static final String KEY_HTTP_LOGGING_LEVEL = "key_http_logging_level";
@NonNull
private final SharedPreferences sharedPreferences;
public DeveloperSettings(@NonNull SharedPreferences sharedPreferences) {
this.sharedPreferences = sharedPreferences;
}
public boolean isStethoEnabled() {
return sharedPreferences.getBoolean(KEY_IS_STETHO_ENABLED, false);
}
public void saveIsStethoEnabled(boolean isStethoEnabled) {
sharedPreferences.edit().putBoolean(KEY_IS_STETHO_ENABLED, isStethoEnabled).apply();
}
public boolean isLeakCanaryEnabled() {
return sharedPreferences.getBoolean(KEY_IS_LEAK_CANARY_ENABLED, false);
}
public void saveIsLeakCanaryEnabled(boolean isLeakCanaryEnabled) {
sharedPreferences.edit().putBoolean(KEY_IS_LEAK_CANARY_ENABLED, isLeakCanaryEnabled).apply();
}
public boolean isTinyDancerEnabled() {
return sharedPreferences.getBoolean(KEY_IS_TINY_DANCER_ENABLED, false);
}
public void saveIsTinyDancerEnabled(boolean isTinyDancerEnabled) {
sharedPreferences.edit().putBoolean(KEY_IS_TINY_DANCER_ENABLED, isTinyDancerEnabled).apply();
}
@NonNull
public HttpLoggingInterceptor.Level getHttpLoggingLevel() {
final String savedHttpLoggingLevel = sharedPreferences.getString(KEY_HTTP_LOGGING_LEVEL, null);
try {
if (savedHttpLoggingLevel != null) {
return HttpLoggingInterceptor.Level.valueOf(savedHttpLoggingLevel);
}
} catch (IllegalArgumentException noSuchLoggingLevel) {
// After OkHttp update old logging level may be removed/renamed so we should handle such case.
Timber.w("No such Http logging level in current version of the app. Saved loggingLevel = %s", savedHttpLoggingLevel);
}
return HttpLoggingInterceptor.Level.BASIC;
}
public void saveHttpLoggingLevel(@NonNull HttpLoggingInterceptor.Level loggingLevel) {
sharedPreferences.edit().putString(KEY_HTTP_LOGGING_LEVEL, loggingLevel.toString()).apply();
}
}