package com.quickblox.sample.core.utils; import android.content.Context; import android.content.SharedPreferences; import com.quickblox.core.helper.StringUtils; import com.quickblox.core.helper.StringifyArrayList; import com.quickblox.sample.core.CoreApp; import com.quickblox.users.model.QBUser; import java.util.ArrayList; import java.util.Arrays; import java.util.Set; import java.util.StringTokenizer; public class SharedPrefsHelper { private static final String SHARED_PREFS_NAME = "qb"; private static final String QB_USER_ID = "qb_user_id"; private static final String QB_USER_LOGIN = "qb_user_login"; private static final String QB_USER_PASSWORD = "qb_user_password"; private static final String QB_USER_FULL_NAME = "qb_user_full_name"; private static final String QB_USER_TAGS = "qb_user_tags"; private static SharedPrefsHelper instance; private SharedPreferences sharedPreferences; public static synchronized SharedPrefsHelper getInstance() { if (instance == null) { instance = new SharedPrefsHelper(); } return instance; } private SharedPrefsHelper() { instance = this; sharedPreferences = CoreApp.getInstance().getSharedPreferences(SHARED_PREFS_NAME, Context.MODE_PRIVATE); } public void delete(String key) { if (sharedPreferences.contains(key)) { getEditor().remove(key).commit(); } } public void save(String key, Object value) { SharedPreferences.Editor editor = getEditor(); if (value instanceof Boolean) { editor.putBoolean(key, (Boolean) value); } else if (value instanceof Integer) { editor.putInt(key, (Integer) value); } else if (value instanceof Float) { editor.putFloat(key, (Float) value); } else if (value instanceof Long) { editor.putLong(key, (Long) value); } else if (value instanceof String) { editor.putString(key, (String) value); } else if (value instanceof Enum) { editor.putString(key, value.toString()); } else if (value != null) { throw new RuntimeException("Attempting to save non-supported preference"); } editor.commit(); } @SuppressWarnings("unchecked") public <T> T get(String key) { return (T) sharedPreferences.getAll().get(key); } @SuppressWarnings("unchecked") public <T> T get(String key, T defValue) { T returnValue = (T) sharedPreferences.getAll().get(key); return returnValue == null ? defValue : returnValue; } public boolean has(String key) { return sharedPreferences.contains(key); } public void saveQbUser(QBUser qbUser) { save(QB_USER_ID, qbUser.getId()); save(QB_USER_LOGIN, qbUser.getLogin()); save(QB_USER_PASSWORD, qbUser.getPassword()); save(QB_USER_FULL_NAME, qbUser.getFullName()); save(QB_USER_TAGS, qbUser.getTags().getItemsAsString()); } public void removeQbUser() { delete(QB_USER_ID); delete(QB_USER_LOGIN); delete(QB_USER_PASSWORD); delete(QB_USER_FULL_NAME); delete(QB_USER_TAGS); } public QBUser getQbUser() { if (hasQbUser()) { Integer id = get(QB_USER_ID); String login = get(QB_USER_LOGIN); String password = get(QB_USER_PASSWORD); String fullName = get(QB_USER_FULL_NAME); String tagsInString = get(QB_USER_TAGS); StringifyArrayList<String> tags = null; if (tagsInString != null) { tags = new StringifyArrayList<>(); tags.add(tagsInString.split(",")); } QBUser user = new QBUser(login, password); user.setId(id); user.setFullName(fullName); user.setTags(tags); return user; } else { return null; } } public boolean hasQbUser() { return has(QB_USER_LOGIN) && has(QB_USER_PASSWORD); } public void clearAllData(){ SharedPreferences.Editor editor = getEditor(); editor.clear().commit(); } private SharedPreferences.Editor getEditor() { return sharedPreferences.edit(); } }