package com.zegoggles.smssync.mail; import android.content.Context; import android.content.SharedPreferences; import android.os.Build; import android.preference.PreferenceManager; import com.zegoggles.smssync.R; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; public enum DataType { SMS (R.string.sms, R.string.sms_with_field, PreferenceKeys.IMAP_FOLDER, Defaults.SMS_FOLDER, PreferenceKeys.BACKUP_SMS, Defaults.SMS_BACKUP_ENABLED, PreferenceKeys.RESTORE_SMS, Defaults.SMS_RESTORE_ENABLED, PreferenceKeys.MAX_SYNCED_DATE_SMS, -1), MMS (R.string.mms, R.string.mms_with_field, PreferenceKeys.IMAP_FOLDER, Defaults.SMS_FOLDER, PreferenceKeys.BACKUP_MMS, Defaults.MMS_BACKUP_ENABLED, null, Defaults.MMS_RESTORE_ENABLED, PreferenceKeys.MAX_SYNCED_DATE_MMS, Build.VERSION_CODES.ECLAIR), CALLLOG (R.string.calllog, R.string.call_with_field, PreferenceKeys.IMAP_FOLDER_CALLLOG, Defaults.CALLLOG_FOLDER, PreferenceKeys.BACKUP_CALLLOG, Defaults.CALLLOG_BACKUP_ENABLED, PreferenceKeys.RESTORE_CALLLOG, Defaults.CALLLOG_RESTORE_ENABLED, PreferenceKeys.MAX_SYNCED_DATE_CALLLOG, -1); public final int resId; public final int withField; public final String backupEnabledPreference; public final String restoreEnabledPreference; public final String folderPreference; public final String defaultFolder; public final int minSdkVersion; public final boolean backupEnabledByDefault; public final boolean restoreEnabledByDefault; public final String maxSyncedPreference; DataType(int resId, int withField, String folderPreference, String defaultFolder, String backupEnabledPreference, boolean backupEnabledByDefault, String restoreEnabledPreference, boolean restoreEnabledByDefault, String maxSyncedPreference, int minSdkVersion) { this.resId = resId; this.withField = withField; this.folderPreference = folderPreference; this.defaultFolder = defaultFolder; this.backupEnabledPreference = backupEnabledPreference; this.backupEnabledByDefault = backupEnabledByDefault; this.restoreEnabledPreference = restoreEnabledPreference; this.restoreEnabledByDefault = restoreEnabledByDefault; this.maxSyncedPreference = maxSyncedPreference; this.minSdkVersion = minSdkVersion; } public boolean isBackupEnabled(Context context) { //noinspection SimplifiableIfStatement if (minSdkVersion > 0 && Build.VERSION.SDK_INT < minSdkVersion) { return false; } else { return prefs(context) .getBoolean(backupEnabledPreference, backupEnabledByDefault); } } public void setBackupEnabled(Context context, boolean enabled) { prefs(context) .edit() .putBoolean(backupEnabledPreference, enabled) .commit(); } public boolean isRestoreEnabled(Context context) { return restoreEnabledPreference != null && prefs(context).getBoolean(restoreEnabledPreference, restoreEnabledByDefault); } public String getFolder(Context context) { return prefs(context).getString(folderPreference, defaultFolder); } /** * @param context the context * @return returns the last synced date in milliseconds (epoch) */ public long getMaxSyncedDate(Context context) { long maxSynced = prefs(context).getLong(maxSyncedPreference, Defaults.MAX_SYNCED_DATE); if (this == MMS && maxSynced > 0) { return maxSynced * 1000L; } else { return maxSynced; } } public boolean setMaxSyncedDate(Context context, long max) { return prefs(context).edit().putLong(maxSyncedPreference, max).commit(); } private SharedPreferences prefs(Context context) { return PreferenceManager.getDefaultSharedPreferences(context); } public static EnumSet<DataType> enabled(Context context) { List<DataType> enabledTypes = new ArrayList<DataType>(); for (DataType t : values()) { if (t.isBackupEnabled(context)) { enabledTypes.add(t); } } return enabledTypes.isEmpty() ? EnumSet.noneOf(DataType.class) : EnumSet.copyOf(enabledTypes); } public static long getMostRecentSyncedDate(Context ctx) { return Math.max(Math.max( SMS.getMaxSyncedDate(ctx), CALLLOG.getMaxSyncedDate(ctx)), MMS.getMaxSyncedDate(ctx)); } public static void clearLastSyncData(Context ctx) { SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(ctx).edit(); for (DataType type : values()) { editor.remove(type.maxSyncedPreference); } editor.commit(); } public static class PreferenceKeys { public static final String IMAP_FOLDER = "imap_folder"; public static final String IMAP_FOLDER_CALLLOG = "imap_folder_calllog"; public static final String BACKUP_SMS = "backup_sms"; public static final String BACKUP_MMS = "backup_mms"; public static final String BACKUP_CALLLOG = "backup_calllog"; public static final String RESTORE_SMS = "restore_sms"; public static final String RESTORE_CALLLOG = "restore_calllog"; public static final String MAX_SYNCED_DATE_SMS = "max_synced_date"; public static final String MAX_SYNCED_DATE_MMS = "max_synced_date_mms"; public static final String MAX_SYNCED_DATE_CALLLOG = "max_synced_date_calllog"; private PreferenceKeys() {} } /** * Defaults for various settings */ public static class Defaults { public static final long MAX_SYNCED_DATE = -1; public static final String SMS_FOLDER = "SMS"; public static final String CALLLOG_FOLDER = "Call log"; public static final boolean SMS_BACKUP_ENABLED = true; public static final boolean MMS_BACKUP_ENABLED = true; public static final boolean CALLLOG_BACKUP_ENABLED = false; public static final boolean SMS_RESTORE_ENABLED = true; public static final boolean MMS_RESTORE_ENABLED = false; public static final boolean CALLLOG_RESTORE_ENABLED = true; private Defaults() {} } }