package org.wikipedia.settings;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import org.wikipedia.WikipediaApp;
import java.util.Collections;
import java.util.Set;
/** Shared preferences input / output utility providing set* functionality that writes to SP on the
* client's behalf, IO without client supplied {@link Context}, and wrappers for using string
* resources as keys, and unifies SP access. */
/*package*/ final class PrefsIoUtil {
@Nullable
public static String getString(@StringRes int id, @Nullable String defaultValue) {
return getString(getKey(id), defaultValue);
}
public static void setString(@StringRes int id, @Nullable String value) {
setString(getKey(id), value);
}
@Nullable
public static Set<String> getStringSet(@StringRes int id, @Nullable Set<String> defaultValue) {
return getStringSet(getKey(id), defaultValue);
}
public static void setStringSet(@StringRes int id, @Nullable Set<String> value) {
setStringSet(getKey(id), value);
}
public static long getLong(@StringRes int id, long defaultValue) {
return getLong(getKey(id), defaultValue);
}
public static void setLong(@StringRes int id, long value) {
setLong(getKey(id), value);
}
public static int getInt(@StringRes int id, int defaultValue) {
return getInt(getKey(id), defaultValue);
}
public static void setInt(@StringRes int id, int value) {
setInt(getKey(id), value);
}
public static boolean getBoolean(@StringRes int id, boolean defaultValue) {
return getBoolean(getKey(id), defaultValue);
}
public static void setBoolean(@StringRes int id, boolean value) {
setBoolean(getKey(id), value);
}
@Nullable
public static String getString(String key, @Nullable String defaultValue) {
return getPreferences().getString(key, defaultValue);
}
public static void setString(String key, @Nullable String value) {
edit().putString(key, value).apply();
}
@Nullable
public static Set<String> getStringSet(String key, @Nullable Set<String> defaultValue) {
Set<String> set = getPreferences().getStringSet(key, defaultValue);
return set == null ? null : Collections.unmodifiableSet(set);
}
public static void setStringSet(String key, @Nullable Set<String> value) {
edit().putStringSet(key, value).apply();
}
public static long getLong(String key, long defaultValue) {
return getPreferences().getLong(key, defaultValue);
}
public static void setLong(String key, long value) {
edit().putLong(key, value).apply();
}
public static int getInt(String key, int defaultValue) {
return getPreferences().getInt(key, defaultValue);
}
public static void setInt(String key, int value) {
edit().putInt(key, value).apply();
}
public static boolean getBoolean(String key, boolean defaultValue) {
return getPreferences().getBoolean(key, defaultValue);
}
public static void setBoolean(String key, boolean value) {
edit().putBoolean(key, value).apply();
}
public static void remove(@StringRes int id) {
remove(getKey(id));
}
public static void remove(String key) {
edit().remove(key).apply();
}
public static boolean contains(@StringRes int id) {
return getPreferences().contains(getKey(id));
}
public static boolean contains(String key) {
return getPreferences().contains(key);
}
/** @return Key String resource from preference_keys.xml. */
@NonNull
public static String getKey(@StringRes int id, Object... formatArgs) {
return getResources().getString(id, formatArgs);
}
@NonNull
private static SharedPreferences.Editor edit() {
return getPreferences().edit();
}
@NonNull
private static SharedPreferences getPreferences() {
return PreferenceManager.getDefaultSharedPreferences(getContext());
}
@NonNull
private static Resources getResources() {
return getContext().getResources();
}
@NonNull
private static Context getContext() {
return WikipediaApp.getInstance();
}
private PrefsIoUtil() { }
}