package org.gdg.frisbee.android.utils; import android.content.Context; import android.content.SharedPreferences; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import org.gdg.frisbee.android.api.model.Chapter; import org.gdg.frisbee.android.app.App; import org.gdg.frisbee.android.eventseries.TaggedEventSeries; import org.joda.time.DateTime; public final class PrefUtils { public static final String PREF_NAME = "gdg"; public static final String SETTINGS_HOME_GDG = "gdg_home"; public static final String SETTINGS_SIGNED_IN = "gdg_signed_in"; public static final String SETTINGS_ANALYTICS = "analytics"; private static final String SETTINGS_HOME_GDG_NAME = "gdg_home_name"; private static final String PREFS_FIRST_START = "gdg_first_start"; private static final String PREFS_VERSION_CODE = "gdg_version_code"; private static final String PREFS_APP_STARTS = "gdg_app_starts"; private static final String PREFS_SEASONS_GREETINGS = "seasons_greetings"; private static final String PREFS_FATAL_GOOGLE_PLAY_SERVICE = "fatal_google_play_service"; private static final String PREFS_EVENT_SERIES_NOTIFICATION_ALARM_SET = "event_series_notification_alarm_set"; private static final boolean PREFS_FIRST_START_DEFAULT = true; private PrefUtils() { // Prevent instances of this class being created. } public static SharedPreferences prefs(final Context context) { return context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); } public static boolean isSignedIn(Context context) { return prefs(context).getBoolean(SETTINGS_SIGNED_IN, false); } public static void setSignedIn(Context context) { prefs(context).edit().putBoolean(SETTINGS_SIGNED_IN, true).apply(); } public static void setSignedOut(Context context) { prefs(context).edit() .putBoolean(SETTINGS_SIGNED_IN, false) .apply(); App.from(context).resetOrganizer(); } @Nullable public static String getHomeChapterId(final Context context) { return prefs(context) .getString(SETTINGS_HOME_GDG, null); } @Nullable public static Chapter getHomeChapter(Context context) { SharedPreferences prefs = prefs(context); String chapterId = prefs.getString(SETTINGS_HOME_GDG, null); if (chapterId == null) { return null; } String chapterName = prefs.getString(SETTINGS_HOME_GDG_NAME, ""); return new Chapter(chapterName, chapterId); } public static void setHomeChapter(final Context context, final Chapter chapter) { prefs(context).edit() .putString(SETTINGS_HOME_GDG, chapter.getGplusId()) .putString(SETTINGS_HOME_GDG_NAME, chapter.getName()) .apply(); } public static void setInitialSettings(final Context context, final boolean enableAnalytics) { prefs(context).edit() .putBoolean(SETTINGS_ANALYTICS, enableAnalytics) .putBoolean(PREFS_FIRST_START, false) .apply(); } public static boolean isFirstStart(Context context) { return prefs(context) .getBoolean(PREFS_FIRST_START, PREFS_FIRST_START_DEFAULT); } public static void increaseAppStartCount(final Context context) { increaseIntPreference(context, PREFS_APP_STARTS); } private static int increaseIntPreference(final Context context, String key) { int newValue = prefs(context).getInt(key, 0) + 1; prefs(context).edit().putInt(key, newValue).apply(); return newValue; } public static boolean isAnalyticsEnabled(final Context context) { return prefs(context).getBoolean(SETTINGS_ANALYTICS, false); } public static int getVersionCode(final Context context) { return prefs(context).getInt(PREFS_VERSION_CODE, 0); } public static int getAppStarts(final Context context) { return prefs(context).getInt(PREFS_APP_STARTS, 0); } public static boolean shouldShowSeasonsGreetings(final Context context) { DateTime now = DateTime.now(); if (prefs(context).getInt(PREFS_SEASONS_GREETINGS, now.getYear() - 1) < now.getYear() && (now.getDayOfYear() >= 354 && now.getDayOfYear() <= 366)) { prefs(context).edit().putInt(PREFS_SEASONS_GREETINGS, now.getYear()).apply(); return true; } return false; } public static void setVersionCode(final Context context, final int newVersion) { prefs(context).edit().putInt(PREFS_VERSION_CODE, newVersion).apply(); } public static void resetInitialSettings(final Context context) { prefs(context).edit() .clear() .apply(); } public static boolean shouldShowFatalPlayServiceMessage(Context context) { return prefs(context).getBoolean(PREFS_FATAL_GOOGLE_PLAY_SERVICE, true); } public static void setFatalPlayServiceMessageShown(Context context) { prefs(context).edit().putBoolean(PREFS_FATAL_GOOGLE_PLAY_SERVICE, false).apply(); } public static boolean isTaggedEventSeriesAlarmSet(Context context, TaggedEventSeries taggedEventSeries) { long lastTimeSent = prefs(context).getLong(keyForEventSeriesAlarmSet(taggedEventSeries), 0); return lastTimeSent >= taggedEventSeries.getStartDate().getMillis(); } public static void setTaggedEventSeriesAlarmTime(Context context, TaggedEventSeries taggedEventSeries) { long currentSeriesStartTime = taggedEventSeries.getStartDate().getMillis(); prefs(context).edit() .putLong(keyForEventSeriesAlarmSet(taggedEventSeries), currentSeriesStartTime) .apply(); } @NonNull private static String keyForEventSeriesAlarmSet(TaggedEventSeries taggedEventSeries) { return PREFS_EVENT_SERIES_NOTIFICATION_ALARM_SET + taggedEventSeries.getTag(); } }