package com.battlelancer.seriesguide.settings; import android.content.Context; import android.content.SharedPreferences; import android.net.Uri; import android.preference.PreferenceManager; import android.support.annotation.Nullable; import android.support.annotation.StringDef; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Settings related to creating and restoring backups of the database. */ public class BackupSettings { // manual backup public static final String KEY_SHOWS_EXPORT_URI = "com.battlelancer.seriesguide.backup.showsExport"; public static final String KEY_SHOWS_IMPORT_URI = "com.battlelancer.seriesguide.backup.showsImport"; public static final String KEY_LISTS_EXPORT_URI = "com.battlelancer.seriesguide.backup.listsExport"; public static final String KEY_LISTS_IMPORT_URI = "com.battlelancer.seriesguide.backup.listsImport"; public static final String KEY_MOVIES_EXPORT_URI = "com.battlelancer.seriesguide.backup.moviesExport"; public static final String KEY_MOVIES_IMPORT_URI = "com.battlelancer.seriesguide.backup.moviesImport"; // auto backup public static final String KEY_AUTO_BACKUP_USE_DEFAULT_FILES = "com.battlelancer.seriesguide.autobackup.defaultFiles"; public static final String KEY_AUTO_BACKUP_SHOWS_EXPORT_URI = "com.battlelancer.seriesguide.autobackup.showsExport"; public static final String KEY_AUTO_BACKUP_LISTS_EXPORT_URI = "com.battlelancer.seriesguide.autobackup.listsExport"; public static final String KEY_AUTO_BACKUP_MOVIES_EXPORT_URI = "com.battlelancer.seriesguide.autobackup.moviesExport"; @Retention(RetentionPolicy.SOURCE) @StringDef({ KEY_SHOWS_EXPORT_URI, KEY_SHOWS_IMPORT_URI, KEY_LISTS_EXPORT_URI, KEY_LISTS_IMPORT_URI, KEY_MOVIES_EXPORT_URI, KEY_MOVIES_IMPORT_URI, KEY_AUTO_BACKUP_SHOWS_EXPORT_URI, KEY_AUTO_BACKUP_LISTS_EXPORT_URI, KEY_AUTO_BACKUP_MOVIES_EXPORT_URI }) public @interface FileUriSettingsKey { } public static boolean isUseAutoBackupDefaultFiles(Context context) { return PreferenceManager.getDefaultSharedPreferences(context) .getBoolean(KEY_AUTO_BACKUP_USE_DEFAULT_FILES, true); } /** * Store or remove (by setting it {@code null}) the URI to a backup file. */ public static boolean storeFileUri(Context context, @FileUriSettingsKey String key, @Nullable Uri uri) { return PreferenceManager.getDefaultSharedPreferences(context) .edit() .putString(key, uri == null ? null : uri.toString()) .commit(); } /** * Retrieve a backup file URI. If looking for an import URI and there is none defined, tries to * get the export URI. */ @Nullable public static Uri getFileUri(Context context, @FileUriSettingsKey String key) { String uriString = PreferenceManager.getDefaultSharedPreferences(context) .getString(key, null); if (uriString == null) { // if there is no import uri, try to fall back to the export file uri if (KEY_SHOWS_IMPORT_URI.equals(key)) { return getFileUri(context, KEY_SHOWS_EXPORT_URI); } else if (KEY_LISTS_IMPORT_URI.equals(key)) { return getFileUri(context, KEY_LISTS_EXPORT_URI); } else if (KEY_MOVIES_IMPORT_URI.equals(key)) { return getFileUri(context, KEY_MOVIES_EXPORT_URI); } return null; } return Uri.parse(uriString); } /** * Returns whether an auto backup file is not configured (either because the user did not or the * backup task removed a file that had issues). */ public static boolean isMissingAutoBackupFile(Context context) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean isMissingBackupFile = false; if (prefs.getString(KEY_AUTO_BACKUP_SHOWS_EXPORT_URI, null) == null) { isMissingBackupFile = true; } else if (prefs.getString(KEY_AUTO_BACKUP_LISTS_EXPORT_URI, null) == null) { isMissingBackupFile = true; } else if (prefs.getString(KEY_AUTO_BACKUP_MOVIES_EXPORT_URI, null) == null) { isMissingBackupFile = true; } return isMissingBackupFile; } }