package com.morristaedt.mirror.configuration; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Color; import android.support.annotation.NonNull; import android.text.TextUtils; import com.morristaedt.mirror.BuildConfig; import com.morristaedt.mirror.requests.ForecastRequest; import java.util.Date; /** * Created by HannahMitt on 9/26/15. */ public class ConfigurationSettings { /** * Hardcode on to enable features outside of their regularly scheduled hours */ private static final boolean DEMO_MODE = false; private static final String PREFS_MIRROR = "MirrorPrefs"; private static final String FORECAST_UNITS = "forecast_units"; private static final String TEXT_COLOR = "text_color"; private static final String BIKING_HINT = "biking_hint"; private static final String USE_MOOD_DETECTION = "mood_detection"; private static final String SHOW_CALENDAR = "show_calendar"; private static final String SHOW_HEADLINE = "show_headline"; private static final String SHOW_XKCD = "xkcd"; private static final String INVERT_XKCD = "invert_xkcd"; private static final String LAT = "lat"; private static final String LON = "lon"; private static final String STOCK_TICKER = "stock_ticker"; private static final String SHOW_COUNTDOWN = "show_countdown"; private static final String COUNTDOWN_END = "countdown_end"; @NonNull private SharedPreferences mSharedPrefs; private String mForecastUnits; private boolean mShowBikingHint; private boolean mShowMoodDetection; private boolean mShowNextCalendarEvent; private boolean mShowNewsHeadline; private boolean mShowXKCD; private boolean mInvertXKCD; private boolean mShowCountdown; private long mCountdownEnd; private String mLatitude; private String mLongitude; private String mStockTickerSymbol; private int mTextColor; public ConfigurationSettings(Context context) { mSharedPrefs = context.getSharedPreferences(PREFS_MIRROR, Context.MODE_PRIVATE); readPrefs(); } private void readPrefs() { mForecastUnits = mSharedPrefs.getString(FORECAST_UNITS, ForecastRequest.UNITS_US); mTextColor = mSharedPrefs.getInt(TEXT_COLOR, Color.WHITE); mShowBikingHint = mSharedPrefs.getBoolean(BIKING_HINT, false); mShowMoodDetection = mSharedPrefs.getBoolean(USE_MOOD_DETECTION, false); mShowNextCalendarEvent = mSharedPrefs.getBoolean(SHOW_CALENDAR, false); mShowNewsHeadline = mSharedPrefs.getBoolean(SHOW_HEADLINE, false); mShowXKCD = mSharedPrefs.getBoolean(SHOW_XKCD, false); mInvertXKCD = mSharedPrefs.getBoolean(INVERT_XKCD, false); mShowCountdown = mSharedPrefs.getBoolean(SHOW_COUNTDOWN, false); mCountdownEnd = mSharedPrefs.getLong(COUNTDOWN_END, System.currentTimeMillis()); mLatitude = mSharedPrefs.getString(LAT, ""); mLongitude = mSharedPrefs.getString(LON, ""); mStockTickerSymbol = mSharedPrefs.getString(STOCK_TICKER, ""); } public void setIsCelsius(boolean isCelsius) { SharedPreferences.Editor editor = mSharedPrefs.edit(); editor.putString(FORECAST_UNITS, isCelsius ? ForecastRequest.UNITS_SI : ForecastRequest.UNITS_US); editor.apply(); } public void setTextColorRed(int red){ setTextColor(Color.rgb(red, Color.green(mTextColor), Color.blue(mTextColor))); } public void setTextColorGreen(int green){ setTextColor(Color.rgb(Color.red(mTextColor), green, Color.blue(mTextColor))); } public void setTextColorBlue(int blue){ setTextColor(Color.rgb(Color.red(mTextColor), Color.green(mTextColor), blue)); } public void setTextColor(int color){ mTextColor = color; SharedPreferences.Editor editor = mSharedPrefs.edit(); editor.putInt(TEXT_COLOR, color); editor.apply(); } public void setShowBikingHint(boolean show) { mShowBikingHint = show; SharedPreferences.Editor editor = mSharedPrefs.edit(); editor.putBoolean(BIKING_HINT, show); editor.apply(); } public void setShowMoodDetection(boolean show) { mShowMoodDetection = show; SharedPreferences.Editor editor = mSharedPrefs.edit(); editor.putBoolean(USE_MOOD_DETECTION, show); editor.apply(); } public void setShowNextCalendarEvent(boolean show) { mShowNextCalendarEvent = show; SharedPreferences.Editor editor = mSharedPrefs.edit(); editor.putBoolean(SHOW_CALENDAR, show); editor.apply(); } public void setShowNewsHeadline(boolean show) { mShowNewsHeadline = show; SharedPreferences.Editor editor = mSharedPrefs.edit(); editor.putBoolean(SHOW_HEADLINE, show); editor.apply(); } public void setXKCDPreference(boolean showXKCD, boolean invertXKCDColors) { mShowXKCD = showXKCD; mInvertXKCD = invertXKCDColors; SharedPreferences.Editor editor = mSharedPrefs.edit(); editor.putBoolean(SHOW_XKCD, showXKCD); editor.putBoolean(INVERT_XKCD, invertXKCDColors); editor.apply(); } public void setLatLon(String latitude, String longitude) { mLatitude = latitude.trim(); mLongitude = longitude.trim(); SharedPreferences.Editor editor = mSharedPrefs.edit(); editor.putString(LAT, mLatitude); editor.putString(LON, mLongitude); editor.apply(); } public void setStockTickerSymbol(String tickerSymbol) { mStockTickerSymbol = tickerSymbol.replace("$", "").trim(); SharedPreferences.Editor editor = mSharedPrefs.edit(); editor.putString(STOCK_TICKER, mStockTickerSymbol); editor.apply(); } public void setShowCountdown(boolean showCountdown){ mShowCountdown = showCountdown; SharedPreferences.Editor editor = mSharedPrefs.edit(); editor.putBoolean(SHOW_COUNTDOWN, showCountdown); editor.apply(); } public void setCountdownTime(int days, int hours, int mins, int secs){ mCountdownEnd = System.currentTimeMillis(); mCountdownEnd += (((days*24l+hours)*60l+mins)*60l+secs)*1000l; SharedPreferences.Editor editor = mSharedPrefs.edit(); editor.putLong(COUNTDOWN_END, mCountdownEnd); editor.apply(); } public boolean getIsCelsius() { return ForecastRequest.UNITS_SI.equals(mForecastUnits); } public String getForecastUnits() { return mForecastUnits; } public int getTextColor() { return mTextColor; } public boolean showBikingHint() { return mShowBikingHint; } public boolean showMoodDetection() { return mShowMoodDetection; } public boolean showNextCalendarEvent() { return mShowNextCalendarEvent; } public boolean showNewsHeadline() { return mShowNewsHeadline; } public boolean showXKCD() { return mShowXKCD; } public boolean invertXKCD() { return mInvertXKCD; } public boolean showCountdown(){ return mShowCountdown; } public Date getCountdownEnd(){ return new Date(mCountdownEnd); } public String getLatitude() { return mLatitude; } public String getLongitude() { return mLongitude; } public boolean showStock() { return !TextUtils.isEmpty(mStockTickerSymbol); } public String getStockTickerSymbol() { return mStockTickerSymbol; } public static boolean isDebugBuild() { return BuildConfig.DEBUG; } /** * Whether we're ignoring timing rules for features * * @return */ public static boolean isDemoMode() { return DEMO_MODE; } }