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();
}
}