// Path: app/src/main/java/ve/com/abicelis/remindy/enums/DateFormat.java
// public enum DateFormat {
//         PRETTY_DATE {
//             @Override
//             public String formatCalendar(Calendar calendar) {
//                 SimpleDateFormat formatter = new SimpleDateFormat("MMM d, yyyy", Locale.getDefault());
//                 String str = formatter.format(calendar.getTime());
// 
//                 if(Locale.getDefault().equals(Locale.ENGLISH) || Locale.getDefault().equals(Locale.US) || Locale.getDefault().equals(Locale.UK) || Locale.getDefault().equals(Locale.CANADA))
//                     str = str.replaceFirst(",", DateFormat.getDayNumberSuffix(calendar.get(Calendar.DAY_OF_MONTH)) + "," );
// 
//                 return str;
//             }
//         },
//         MONTH_DAY_YEAR{
//             @Override
//             public String formatCalendar(Calendar calendar) {
//                 SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy", Locale.getDefault());
//                 return formatter.format(calendar.getTime());
//             }
//         },
//         DAY_MONTH_YEAR{
//             @Override
//             public String formatCalendar(Calendar calendar) {
//                 SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
//                 return formatter.format(calendar.getTime());
//             }
//         },
//     ;
// 
//     public abstract String formatCalendar(Calendar calendar);
// 
//     private static String getDayNumberSuffix(int day) {
//         if (day >= 11 && day <= 13) {
//             return "th";
//         }
//         switch (day % 10) {
//             case 1:
//                 return "st";
//             case 2:
//                 return "nd";
//             case 3:
//                 return "rd";
//             default:
//                 return "th";
//         }
//     }
// 
// }
// 
// Path: app/src/main/java/ve/com/abicelis/remindy/enums/TimeFormat.java
// public enum TimeFormat {
//     FORMAT_24H,
//     FORMAT_12H
// }
// 
// Path: app/src/main/java/ve/com/abicelis/remindy/enums/TriggerMinutesBeforeNotificationType.java
// public enum TriggerMinutesBeforeNotificationType {
//     MINUTES_1(1),
//     MINUTES_5(5),
//     MINUTES_10(10),
//     MINUTES_20(20);
// 
//     private int mMinutes;
// 
//     TriggerMinutesBeforeNotificationType(int minutes) {
//         mMinutes = minutes;
//     }
// 
//     public int getMinutes() {
//         return mMinutes;
//     }
// }
// 
// Path: app/src/main/java/ve/com/abicelis/remindy/enums/TapTargetSequenceType.java
// public enum TapTargetSequenceType {
//     EDIT_IMAGE_ATTACHMENT_ACTIVITY,
//     PLACE_LIST_ACTIVITY,
//     PLACE_ACTIVITY,
// }


import android.content.Context;
import android.content.SharedPreferences;
import android.support.v7.preference.PreferenceManager;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import ve.com.abicelis.remindy.R;
import ve.com.abicelis.remindy.enums.DateFormat;
import ve.com.abicelis.remindy.enums.TimeFormat;
import ve.com.abicelis.remindy.enums.TriggerMinutesBeforeNotificationType;
import ve.com.abicelis.remindy.enums.TapTargetSequenceType;
        try {
            pref = DateFormat.valueOf(dfPref);
        } catch (Exception e) {
            pref = null;
        }

        if(pref == null) {
            Log.d("SharedPreferenceUtil", "getDateFormat() found null, setting PRETTY_DATE");
            DateFormat df = DateFormat.PRETTY_DATE;
            setDateFormat(df, context);
            return df;
        }
        else return pref;
    }

    public static void setDateFormat(DateFormat df, Context context) {
        SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit();
        editor.putString(context.getResources().getString(R.string.settings_date_format_key), df.name());
        editor.apply();
    }





    public static TimeFormat getTimeFormat(Context context) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        String tfPref = preferences.getString(context.getResources().getString(R.string.settings_time_format_key), null);
        TimeFormat pref;
        try {
// Path: app/src/main/java/ve/com/abicelis/remindy/enums/DateFormat.java
// public enum DateFormat {
//         PRETTY_DATE {
//             @Override
//             public String formatCalendar(Calendar calendar) {
//                 SimpleDateFormat formatter = new SimpleDateFormat("MMM d, yyyy", Locale.getDefault());
//                 String str = formatter.format(calendar.getTime());
// 
//                 if(Locale.getDefault().equals(Locale.ENGLISH) || Locale.getDefault().equals(Locale.US) || Locale.getDefault().equals(Locale.UK) || Locale.getDefault().equals(Locale.CANADA))
//                     str = str.replaceFirst(",", DateFormat.getDayNumberSuffix(calendar.get(Calendar.DAY_OF_MONTH)) + "," );
// 
//                 return str;
//             }
//         },
//         MONTH_DAY_YEAR{
//             @Override
//             public String formatCalendar(Calendar calendar) {
//                 SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy", Locale.getDefault());
//                 return formatter.format(calendar.getTime());
//             }
//         },
//         DAY_MONTH_YEAR{
//             @Override
//             public String formatCalendar(Calendar calendar) {
//                 SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
//                 return formatter.format(calendar.getTime());
//             }
//         },
//     ;
// 
//     public abstract String formatCalendar(Calendar calendar);
// 
//     private static String getDayNumberSuffix(int day) {
//         if (day >= 11 && day <= 13) {
//             return "th";
//         }
//         switch (day % 10) {
//             case 1:
//                 return "st";
//             case 2:
//                 return "nd";
//             case 3:
//                 return "rd";
//             default:
//                 return "th";
//         }
//     }
// 
// }
// 
// Path: app/src/main/java/ve/com/abicelis/remindy/enums/TimeFormat.java
// public enum TimeFormat {
//     FORMAT_24H,
//     FORMAT_12H
// }
// 
// Path: app/src/main/java/ve/com/abicelis/remindy/enums/TriggerMinutesBeforeNotificationType.java
// public enum TriggerMinutesBeforeNotificationType {
//     MINUTES_1(1),
//     MINUTES_5(5),
//     MINUTES_10(10),
//     MINUTES_20(20);
// 
//     private int mMinutes;
// 
//     TriggerMinutesBeforeNotificationType(int minutes) {
//         mMinutes = minutes;
//     }
// 
//     public int getMinutes() {
//         return mMinutes;
//     }
// }
// 
// Path: app/src/main/java/ve/com/abicelis/remindy/enums/TapTargetSequenceType.java
// public enum TapTargetSequenceType {
//     EDIT_IMAGE_ATTACHMENT_ACTIVITY,
//     PLACE_LIST_ACTIVITY,
//     PLACE_ACTIVITY,
// }


// Path: app/src/main/java/ve/com/abicelis/remindy/util/SharedPreferenceUtil.java
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v7.preference.PreferenceManager;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import ve.com.abicelis.remindy.R;
import ve.com.abicelis.remindy.enums.DateFormat;
import ve.com.abicelis.remindy.enums.TimeFormat;
import ve.com.abicelis.remindy.enums.TriggerMinutesBeforeNotificationType;
import ve.com.abicelis.remindy.enums.TapTargetSequenceType;

        try {
            pref = DateFormat.valueOf(dfPref);
        } catch (Exception e) {
            pref = null;
        }

        if(pref == null) {
            Log.d("SharedPreferenceUtil", "getDateFormat() found null, setting PRETTY_DATE");
            DateFormat df = DateFormat.PRETTY_DATE;
            setDateFormat(df, context);
            return df;
        }
        else return pref;
    }

    public static void setDateFormat(DateFormat df, Context context) {
        SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit();
        editor.putString(context.getResources().getString(R.string.settings_date_format_key), df.name());
        editor.apply();
    }





    public static TimeFormat getTimeFormat(Context context) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        String tfPref = preferences.getString(context.getResources().getString(R.string.settings_time_format_key), null);
        TimeFormat pref;
        try {
            pref = TimeFormat.valueOf(tfPref);