package pro.dbro.glance;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.Uri;
import android.preference.PreferenceManager;
import pro.dbro.glance.fragments.PreferencesFragment;
import pro.dbro.glance.fragments.WpmDialogFragment;
/**
* Created by davidbrodsky on 9/21/14.
*/
public class GlancePrefsManager {
/** SharedPreferences store names */
private static final String UI_PREFS = "ui_prefs";
private static final String APP_PREFS = "espritz";
/** SharedPreferences keys */
private static final String UI_THEME = "THEME";
private static final String APP_URI = "uri";
private static final String APP_TITLE = "title";
private static final String APP_CHAPTER = "chapter";
private static final String APP_WORD = "word";
private static final String APP_WPM = "wpm";
private static final String APP_SAW_ONBOARDER = "onboarder";
/** Default SharedPreferences Values */
public static final int DEFAULT_APP_WPM = 500;
public static boolean getShouldShowOnboarder(Context context) {
boolean result = context.getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE)
.getBoolean(APP_SAW_ONBOARDER, false);
if (!result)
context.getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE).edit().putBoolean(APP_SAW_ONBOARDER, true).apply();
return !result;
}
public static int getTheme(Context context) {
return context.getSharedPreferences(UI_PREFS, Context.MODE_PRIVATE)
.getInt(UI_THEME, 1);
}
public static void setTheme(Context context, int theme) {
context.getSharedPreferences(UI_PREFS, Context.MODE_PRIVATE).edit()
.putInt(UI_THEME, theme)
.commit();
}
public static void saveState(Context context, int chapter, String uri, int wordIdx, String title, int wpm) {
SharedPreferences.Editor editor = context.getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE).edit();
editor.putInt(APP_CHAPTER, chapter)
.putString(APP_URI, uri)
.putInt(APP_WORD, wordIdx)
.putString(APP_TITLE, title)
.putInt(APP_WPM, wpm)
.apply();
}
public static SpritzState getState(Context context) {
SharedPreferences prefs = context.getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE);
return new SpritzState(
prefs.getInt(APP_CHAPTER, 0),
prefs.getString(APP_URI, null),
prefs.getInt(APP_WORD, 0),
prefs.getString(APP_TITLE, null),
prefs.getInt(APP_WPM, 500)
);
}
public static void clearState(Context context) {
context.getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE).edit().clear().apply();
}
public static void setWpm(Context context, int wpm) {
SharedPreferences.Editor editor = context.getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE).edit();
editor.putInt(APP_WPM, Math.max(wpm, WpmDialogFragment.MIN_WPM))
.apply();
}
public static int getWpm(Context context) {
SharedPreferences prefs = context.getSharedPreferences(APP_PREFS, Context.MODE_PRIVATE);
return prefs.getInt(APP_WPM, DEFAULT_APP_WPM);
}
public static SharePref getShareMode(Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String sharePref = prefs.getString(context.getString(R.string.pref_key_share_mode),
context.getString(R.string.pref_share_mode_default));
// Possible to avoid hardcoded relation to order of R.array.pref_share_mode_machine?
// Note we can't even use index values of that array, as switch statement requires constant
// invariants
switch (sharePref) {
case "never":
return SharePref.NEVER;
case "ask":
return SharePref.ASK;
case "always":
return SharePref.ALWAYS;
}
throw new RuntimeException("Illegal sharing preference! Got preference: " + sharePref);
}
public static enum SharePref {
ALWAYS, ASK, NEVER
}
public static class SpritzState {
private int mChapter;
private String mUri;
private int mWordIdx;
private String mTitle;
private int mWpm;
public SpritzState(int chapter, String uri, int wordIdx, String title, int wpm) {
mChapter = chapter;
mUri = uri;
mWordIdx = wordIdx;
mTitle = title;
mWpm = wpm;
}
public boolean hasUri() {
return mUri != null;
}
public Uri getUri() {
return Uri.parse(mUri);
}
public boolean hasTitle() {
return mTitle != null;
}
public String getTitle() {
return mTitle;
}
public int getChapter() {
return mChapter;
}
public int getWpm() {
return (mWpm == 0 ? DEFAULT_APP_WPM : mWpm);
}
public int getWordIdx() {
return mWordIdx;
}
}
}