package com.stxnext.management.android.storage.prefs; import java.util.ArrayList; import java.util.List; import org.apache.http.cookie.Cookie; import android.content.Context; import android.content.SharedPreferences; import com.google.common.base.Strings; import com.stxnext.management.android.dto.local.CookiesHolder; import com.stxnext.management.android.dto.local.LocalCookie; public class StoragePrefs { public static final String PREFS_LOCATION = "com.stxnext"; private static final String STRING_WEB_COOKIES = "stringWebCookies"; private static final String AUTH_CODE = "authCode"; private static final String SYNC_IS_ON = "syncIsOn"; private static final String DAYS_OFF_TO_TAKE = "daysOffToTake"; private static StoragePrefs _instance; private Context context; private SharedPreferences prefs; public static final StoragePrefs getInstance(Context context) { if (_instance == null) { _instance = new StoragePrefs(context); _instance.setSyncing(false); } return _instance; } private StoragePrefs(Context context) { this.context = context.getApplicationContext(); this.prefs = this.context.getSharedPreferences(PREFS_LOCATION, Context.MODE_MULTI_PROCESS); } public void setCookies(List<Cookie> cookies) { if (cookies == null) { prefs.edit().putString(STRING_WEB_COOKIES, null).commit(); return; } ArrayList<LocalCookie> locals = new ArrayList<LocalCookie>(); for (Cookie c : cookies) { locals.add(new LocalCookie(c)); } CookiesHolder holder = new CookiesHolder(); holder.setCookies(locals); String jsonForm = holder.serialize(); prefs.edit().putString(STRING_WEB_COOKIES, jsonForm).commit(); } public List<Cookie> getCookies() { List<Cookie> result = new ArrayList<Cookie>(); String jsonForm = prefs.getString(STRING_WEB_COOKIES, null); if (!Strings.isNullOrEmpty(jsonForm)) { CookiesHolder holder = CookiesHolder.fromJsonString(jsonForm, CookiesHolder.class); if (holder != null) { for (LocalCookie local : holder.getCookies()) { result.add(local.convertToRealCookie()); } } } return result; } public void setAuthCode(String code) { prefs.edit().putString(AUTH_CODE, code).commit(); } public String getAuthCode() { return prefs.getString(AUTH_CODE, null); } public void setDaysOffToTake(Integer days) { prefs.edit().putInt(DAYS_OFF_TO_TAKE, days).commit(); } public Integer getDaysOffToTake() { int daysOff = prefs.getInt(DAYS_OFF_TO_TAKE, -1); //we like nulls, nulls are legit return daysOff!=-1?daysOff:null; } public void setSyncing(boolean syncing) { prefs.edit().putBoolean(SYNC_IS_ON, syncing).commit(); } public boolean isSyncing() { return prefs.getBoolean(SYNC_IS_ON, false); } }