package com.uservoice.uservoicesdk;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import com.uservoice.uservoicesdk.babayaga.Babayaga;
import com.uservoice.uservoicesdk.model.AccessToken;
import com.uservoice.uservoicesdk.model.Article;
import com.uservoice.uservoicesdk.model.ClientConfig;
import com.uservoice.uservoicesdk.model.Comment;
import com.uservoice.uservoicesdk.model.CustomField;
import com.uservoice.uservoicesdk.model.Forum;
import com.uservoice.uservoicesdk.model.RequestToken;
import com.uservoice.uservoicesdk.model.Suggestion;
import com.uservoice.uservoicesdk.model.Topic;
import com.uservoice.uservoicesdk.model.User;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
public class Session {
private static Session instance;
private Context context;
private Config config;
private OAuthConsumer oauthConsumer;
private RequestToken requestToken;
private AccessToken accessToken;
private User user;
private ClientConfig clientConfig;
private Forum forum;
private List<Topic> topics;
private List<Article> articles;
private Map<String, String> externalIds = new HashMap<String, String>();
private Suggestion suggestion;
private Article article;
private Topic topic;
private Comment comment;
private CustomField customField;
private Runnable signinListener;
private Session() {
}
public static Session getInstance() {
if (instance == null) {
instance = new Session();
}
return instance;
}
public static void reset() {
instance = null;
}
public Context getContext() {
return context;
}
public void setContext(Context context) {
this.context = context;
}
public Config getConfig() {
return config;
}
public void setConfig(Config config) {
this.config = config;
if (config.getEmail() != null) {
persistIdentity(config.getName(), config.getEmail());
}
}
public void persistIdentity(String name, String email) {
Editor edit = getSharedPreferences().edit();
edit.putString("user_name", name);
edit.putString("user_email", email);
edit.commit();
}
public String getName() {
if (user != null)
return user.getName();
return getSharedPreferences().getString("user_name", null);
}
public String getEmail() {
if (user != null)
return user.getEmail();
return getSharedPreferences().getString("user_email", null);
}
public RequestToken getRequestToken() {
return requestToken;
}
public void setRequestToken(RequestToken requestToken) {
this.requestToken = requestToken;
}
public OAuthConsumer getOAuthConsumer() {
if (oauthConsumer == null) {
if (config.getKey() != null)
oauthConsumer = new CommonsHttpOAuthConsumer(config.getKey(), config.getSecret());
else if (clientConfig != null)
oauthConsumer = new CommonsHttpOAuthConsumer(clientConfig.getKey(), clientConfig.getSecret());
}
return oauthConsumer;
}
public AccessToken getAccessToken() {
return accessToken;
}
public void setAccessToken(AccessToken accessToken) {
this.accessToken = accessToken;
}
public void setAccessToken(Context context, AccessToken accessToken) {
this.accessToken = accessToken;
accessToken.persist(getSharedPreferences(), "access_token", "access_token");
if (signinListener != null)
signinListener.run();
}
public SharedPreferences getSharedPreferences() {
return context.getSharedPreferences("uv_" + config.getSite().replaceAll("\\W", "_"), 0);
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
persistIdentity(user.getName(), user.getEmail());
}
public ClientConfig getClientConfig() {
return clientConfig;
}
public void setClientConfig(ClientConfig clientConfig) {
this.clientConfig = clientConfig;
Babayaga.flush();
}
public void setExternalId(String scope, String id) {
externalIds.put(scope, id);
}
public Map<String, String> getExternalIds() {
return externalIds;
}
public Forum getForum() {
return forum;
}
public void setForum(Forum forum) {
this.forum = forum;
}
public Suggestion getSuggestion() {
return suggestion;
}
public void setSuggestion(Suggestion suggestion) {
this.suggestion = suggestion;
}
public Article getArticle() {
return article;
}
public void setArticle(Article article) {
this.article = article;
}
public Topic getTopic() {
return topic;
}
public void setTopic(Topic topic) {
this.topic = topic;
}
public Comment getComment() {
return comment;
}
public void setComment(Comment comment) {
this.comment = comment;
}
public List<Topic> getTopics() {
return topics;
}
public void setTopics(List<Topic> topics) {
this.topics = topics;
}
public List<Article> getArticles() {
return articles;
}
public void setArticles(List<Article> articles) {
this.articles = articles;
}
public CustomField getCustomField() {
return customField;
}
public void setCustomField(CustomField customField) {
this.customField = customField;
}
public void setSignInListener(Runnable runnable) {
signinListener = runnable;
}
}