package org.bookdash.android.data.settings; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; import com.google.gson.Gson; import org.bookdash.android.config.RemoteConfigSettingsApi; import org.bookdash.android.domain.model.firebase.FireLanguage; import java.util.concurrent.Callable; import rx.Single; /** * @author rebeccafranks * @since 15/11/05. */ public class SettingsApiImpl implements SettingsApi { public static final String FIRE_LANGUAGE_PREF = "fire_language_pref"; public static final String PREF_IS_SUBSCRIBED_NEW_BOOK_NOTIFICATIONS = "pref_new_book_notification"; private static final String PREF_IS_FIRST_TIME = "is_first_time"; private final Context context; private final RemoteConfigSettingsApi remoteConfig; public SettingsApiImpl(Context context, RemoteConfigSettingsApi remoteConfigSettingsApi) { this.context = context; this.remoteConfig = remoteConfigSettingsApi; } @Override public boolean isFirstTime() { return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(PREF_IS_FIRST_TIME, true); } @Override public void setIsFirstTime(boolean isFirstTime) { SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); editor.putBoolean(PREF_IS_FIRST_TIME, isFirstTime); editor.apply(); } @Override public Single<Boolean> saveSelectedLanguage(final FireLanguage fireLanguage) { return Single.defer(new Callable<Single<Boolean>>() { @Override public Single<Boolean> call() throws Exception { Gson gson = new Gson(); String json = gson.toJson(fireLanguage); SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); editor.putString(FIRE_LANGUAGE_PREF, json); editor.apply(); return Single.just(true); } }); } @Override public Single<FireLanguage> getSavedLanguage() { return Single.defer(new Callable<Single<FireLanguage>>() { @Override public Single<FireLanguage> call() throws Exception { Gson gson = new Gson(); SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); String json = sharedPreferences.getString(FIRE_LANGUAGE_PREF, ""); if (json.isEmpty()) { return Single.just(new FireLanguage(remoteConfig.getDefaultLanguageName(), remoteConfig.getDefaultLanguageAbbreviation(), true, remoteConfig.getDefaultLanguageId())); } return Single.just(gson.fromJson(json, FireLanguage.class)); } }); } @Override public Single<Boolean> isSubscribedToNewBookNotification() { return Single.defer(new Callable<Single<Boolean>>() { @Override public Single<Boolean> call() throws Exception { return Single.just(PreferenceManager.getDefaultSharedPreferences(context) .getBoolean(PREF_IS_SUBSCRIBED_NEW_BOOK_NOTIFICATIONS, true)); } }); } @Override public Single<Boolean> saveNewBookNotificationPreference(final boolean onOff) { return Single.defer(new Callable<Single<Boolean>>() { @Override public Single<Boolean> call() throws Exception { return Single.just(PreferenceManager.getDefaultSharedPreferences(context).edit() .putBoolean(PREF_IS_SUBSCRIBED_NEW_BOOK_NOTIFICATIONS, onOff).commit()); } }); } }