package ua.kpi.ecampus.ui;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import com.google.gson.Gson;
import ua.kpi.ecampus.Config;
import ua.kpi.ecampus.di.ActivityContext;
import ua.kpi.ecampus.model.pojo.Item;
import ua.kpi.ecampus.model.pojo.Token;
import ua.kpi.ecampus.model.pojo.User;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
/**
* Implement queries to SharedPrefernces.
* <p>
* Created by Administrator on 21.03.2016.
*/
public class Preference {
private Activity mActivityContext;
private SharedPreferences mSharedPrefs;
@Inject
public Preference(@ActivityContext Context context) {
mActivityContext = (Activity) context;
mSharedPrefs = mActivityContext.getSharedPreferences(Config
.SHARED_PREF_NAME, Context.MODE_PRIVATE);
}
/**
* Save login values to the SharedPreferences.
*/
public void saveLoginInfo(Token token) {
SharedPreferences.Editor editor = mSharedPrefs.edit();
//Adding values to editor
editor.putBoolean(Config.IS_LOGGED_SHARED_PREF, true);
editor.putString(Config.TOKEN_SHARED_PREF, token.getAccessToken());
editor.putLong(Config.EXPIRES_IN_SHARED_PREF, expiresTime(token));
//Saving values to editor
editor.commit();
}
/**
* Get value is user logged.
*
* @return is logged.
*/
public boolean getIsLogged() {
return mSharedPrefs.getBoolean(Config.IS_LOGGED_SHARED_PREF, false);
}
/**
* Save logout values to the SharedPreferences.
*/
public void saveLogoutInfo() {
SharedPreferences.Editor editor = mSharedPrefs.edit();
editor.putBoolean(Config.IS_LOGGED_SHARED_PREF, false);
editor.putString(Config.TOKEN_SHARED_PREF, "");
editor.commit();
}
/**
* Save information about user to the SharedPreferences.
*
* @param user
*/
public void saveUserInfo(User user) {
SharedPreferences.Editor editor = mSharedPrefs.edit();
editor.putString(Config.USER_ID, user.id);
editor.putString(Config.USER_NAME, user.name);
Gson gson = new Gson();
editor.putString(Config.USER_POSITION, gson.toJson(user.position));
editor.putString(Config.USER_SUBDIVISION, gson.toJson(user
.subdivision));
editor.putBoolean(Config.USER_IS_BB_MODERATOR, user
.isBulletinBoardModerator);
editor.commit();
}
/**
* Get user's id.
*
* @return id
*/
public String getUserId() {
return mSharedPrefs.getString(Config.USER_ID, "");
}
/**
* Get user's name.
*
* @return name.
*/
public String getUserName() {
return mSharedPrefs.getString(Config.USER_NAME, "");
}
/**
* Get user positions.
*
* @return list of user's positions.
*/
public List<Item> getUserPositions() {
String jsonPositions = mSharedPrefs.getString(Config.USER_POSITION, "");
Gson gson = new Gson();
Item[] positions = gson.fromJson(jsonPositions, Item[].class);
return (positions != null) ? new ArrayList(Arrays.asList(positions))
: new ArrayList<>();
}
/**
* Get user subdivisions.
*
* @return list of user's subdivisions.
*/
public List<Item> getUserSubdivisions() {
String jsonPositions = mSharedPrefs.getString(Config
.USER_SUBDIVISION, "");
Gson gson = new Gson();
Item[] subdiv = gson.fromJson(jsonPositions, Item[].class);
return (subdiv != null) ? new ArrayList(Arrays.asList(subdiv)) : new
ArrayList<>();
}
/**
* Get value whether user is moderator of Bulletin Board.
*
* @return true - if user is moderator, false - otherwise.
*/
public boolean getIsUserBbModerator() {
return mSharedPrefs.getBoolean(Config.USER_IS_BB_MODERATOR, false);
}
/**
* Get authentication token.
*
* @return token string.
*/
public String getToken() {
return mSharedPrefs.getString(Config.TOKEN_SHARED_PREF, "");
}
/**
* Get token expiration date in milliseconds from SharedPreferences.
*
* @return datetime in milliseconds
*/
public Date getTokenExpirationDate() {
return new Date(mSharedPrefs.getLong(Config.EXPIRES_IN_SHARED_PREF, 0));
}
/**
* Compose token expiration time in milliseconds
*
* @param token
* @return expiration time in milliseconds
*/
private long expiresTime(Token token) {
int seconds = token.getExpiresIn();
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.SECOND, seconds);
Date date = calendar.getTime();
return date.getTime();
}
}