emotionhero/app/src/main/java/com/rubenvandeven/emotionhero/Player.java

133 lines
3.4 KiB
Java

package com.rubenvandeven.emotionhero;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* The current player of the game (for this device)
* Created by ruben on 22/08/16.
*/
public class Player {
final static String PLAYERINFO_FILENAME = "playerinfo.json";
private static Player ourInstance;
private Context c;
PlayerInfo info;
/**
* Api calls are on player basis, so call them from here
*/
public ApiRestClient api;
public static final String PREFS_NAME = "PlayerPrefs";
public static Player getInstance(Context c) {
if(ourInstance == null) {
ourInstance = new Player(c);
}
return ourInstance;
}
private Player(Context c) {
this.c = c;
this.info = loadPlayerInfo();
api = new ApiRestClient(this);
}
public Context getContext() {
return c;
}
/**
* Set the Id as it is used on the API
* @return
*/
public String getRemoteId() {
SharedPreferences settings = c.getSharedPreferences(PREFS_NAME, 0);
return settings.getString("remoteId", null);
}
public void setRemoteId(String remoteId) {
SharedPreferences settings = c.getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("remoteId", remoteId);
editor.commit();
}
/**
* Set the JWT as it is used on the API
* @return
*/
public String getJWT() {
SharedPreferences settings = c.getSharedPreferences(PREFS_NAME, 0);
return settings.getString("jwt", null);
}
public void setJWT(String jwt) {
SharedPreferences settings = c.getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("jwt", jwt);
editor.commit();
}
public PlayerInfo getPlayerInfo() {
return this.info;
}
public PlayerInfo loadPlayerInfo() {
try{
FileInputStream fis = c.openFileInput(PLAYERINFO_FILENAME );
StringBuilder builder = new StringBuilder();
int ch;
while((ch = fis.read()) != -1){
builder.append((char)ch);
}
Log.d("PLAYER", builder.toString());
return PlayerInfo.fromJson(builder.toString());
} catch (IOException e) {
return new PlayerInfo();
}
}
public boolean isNew() {
if(this.info.reachedLevelId < 0) {
return true;
}
return false;
}
public void savePlayerScore(Score score) {
info.addScore(score);
savePlayerInfo(info);
}
public void savePlayerInfo(PlayerInfo playerInfo) {
try {
FileOutputStream fos = c.openFileOutput(PLAYERINFO_FILENAME, Context.MODE_PRIVATE);
fos.write(playerInfo.toJson().getBytes());
fos.close();
} catch(IOException e) {
// for now skip error
Log.e("PlayerInfo", "Could not save player information!");
}
}
private GameOpenHelper gameOpenHelper;
public GameOpenHelper getGameOpenHelper() {
if(gameOpenHelper == null) {
gameOpenHelper = new GameOpenHelper(getContext());
}
return gameOpenHelper;
}
}