package org.solovyev.android.calculator; import android.content.SharedPreferences; import android.support.annotation.NonNull; import org.solovyev.android.prefs.BooleanPreference; import org.solovyev.android.prefs.IntegerPreference; import org.solovyev.android.prefs.Preference; import javax.annotation.Nonnull; import javax.inject.Inject; import javax.inject.Singleton; @Singleton public final class UiPreferences { @NonNull public static final Preference<Integer> opened = IntegerPreference.of("opened", 0); @NonNull public static final Preference<Integer> version = IntegerPreference.of("version", 1); @NonNull public static final Preference<Integer> appVersion = IntegerPreference.of("appVersion", IntegerPreference.DEF_VALUE); @NonNull public static final Preference<Boolean> rateUsShown = BooleanPreference.of("rateUsShown", false); public boolean showFixableErrorDialog = true; @Inject public UiPreferences() { } public static void init(@NonNull SharedPreferences preferences, @NonNull SharedPreferences uiPreferences) { final int currentVersion = getVersion(uiPreferences); if (currentVersion == 0) { final SharedPreferences.Editor editor = uiPreferences.edit(); migratePreference(uiPreferences, preferences, editor, UiPreferences.rateUsShown, Preferences.Deleted.feedbackWindowShown); migratePreference(uiPreferences, preferences, editor, UiPreferences.opened, Preferences.Deleted.appOpenedCounter); migratePreference(uiPreferences, preferences, editor, UiPreferences.appVersion, Preferences.Deleted.appVersion); version.putDefault(editor); editor.apply(); } } private static <T> void migratePreference(@NonNull SharedPreferences uiPreferences, @Nonnull SharedPreferences preferences, @NonNull SharedPreferences.Editor uiEditor, @NonNull Preference<T> uiPreference, @NonNull Preference<T> preference) { if (!preference.isSet(preferences)) { return; } if (!uiPreference.isSet(uiPreferences)) { uiPreference.putPreference(uiEditor, preference.getPreferenceNoError(preferences)); } } private static int getVersion(@NonNull SharedPreferences uiPreferences) { if (version.isSet(uiPreferences)) { return version.getPreference(uiPreferences); } return 0; } public boolean isShowFixableErrorDialog() { return showFixableErrorDialog; } public void setShowFixableErrorDialog(boolean showFixableErrorDialog) { this.showFixableErrorDialog = showFixableErrorDialog; } public static final class Converter { @NonNull public static final Preference<Integer> lastDimension = IntegerPreference.of("converter.lastDimension", -1); @NonNull public static final Preference<Integer> lastUnitsFrom = IntegerPreference.of("converter.lastUnitsFrom", -1); @NonNull public static final Preference<Integer> lastUnitsTo = IntegerPreference.of("converter.lastUnitsTo", -1); } }