package de.dbaelz.secludedness.manager;
import java.nio.ByteBuffer;
import android.os.Bundle;
import com.google.android.gms.appstate.AppStateClient;
import com.google.android.gms.appstate.OnStateLoadedListener;
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
import com.google.example.games.basegameutils.GameHelper;
import de.dbaelz.secludedness.MainActivity;
public class AndroidGPGSManager implements GPGSManager, OnStateLoadedListener, ConnectionCallbacks {
private final int STATE_KEY = 0;
private GameHelper mGameHelper;
private MainActivity mActivity;
public AndroidGPGSManager(GameHelper gamehelper, MainActivity activity) {
mGameHelper = gamehelper;
mActivity = activity;
}
@Override
public boolean isSignedIn() {
return mGameHelper.isSignedIn();
}
@Override
public void signIn() {
mGameHelper.beginUserInitiatedSignIn();
}
@Override
public void signOut() {
mGameHelper.signOut();
}
@Override
public void unlockAchievement(String achievementID) {
if (isSignedIn()) {
mGameHelper.getGamesClient().unlockAchievement(achievementID);
}
}
@Override
public void incrementAchievement(String achievementID, int steps) {
if (isSignedIn()) {
mGameHelper.getGamesClient().incrementAchievement(achievementID, steps);
}
}
@Override
public void getAchievements() {
if (isSignedIn()) {
mActivity.startActivityForResult(mGameHelper.getGamesClient().getAchievementsIntent(), 10);
}
}
@Override
public void submitScore(String leaderboardID, int score) {
if (isSignedIn()) {
mGameHelper.getGamesClient().submitScore(leaderboardID, score);
}
}
@Override
public void getLeaderboard(String leaderboardID) {
if (isSignedIn()) {
mActivity.startActivityForResult(mGameHelper.getGamesClient().getLeaderboardIntent(leaderboardID), 11);
}
}
@Override
public void saveCampaignToCloud(int campaignLevel, int campaignScore) {
if (isSignedIn()) {
ByteBuffer buffer = ByteBuffer.allocate(9);
buffer.putInt(campaignLevel);
buffer.putInt(campaignScore);
mGameHelper.getAppStateClient().updateState(STATE_KEY, buffer.array());
}
}
@Override
public void loadCampaignFromCloud() {
if (isSignedIn()) {
mGameHelper.getAppStateClient().loadState(this, STATE_KEY);
}
}
@Override
public void onStateConflict(int stateKey, String version, byte[] localData, byte[] serverData) {
ByteBuffer localBuffer = ByteBuffer.wrap(localData);
ByteBuffer serverBuffer = ByteBuffer.wrap(serverData);
int localCampaignLevel = localBuffer.getInt();
int serverCampaignLevel = serverBuffer.getInt();
LevelManager levelManager = mActivity.getGame().getLevelManager();
if (levelManager.getCurrentCampaignLevel() > localCampaignLevel
|| levelManager.getCurrentCampaignLevel() > serverCampaignLevel) {
return;
}
if (localCampaignLevel >= serverCampaignLevel) {
levelManager.setCurrentCampaignLevel(localCampaignLevel);
levelManager.setCampaignScore(localBuffer.getInt());
} else {
levelManager.setCurrentCampaignLevel(serverCampaignLevel);
levelManager.setCampaignScore(serverBuffer.getInt());
}
}
@Override
public void onStateLoaded(int statusCode, int stateKey, byte[] data) {
LevelManager levelManager = mActivity.getGame().getLevelManager();
switch (statusCode) {
case AppStateClient.STATUS_OK:
ByteBuffer buffer = ByteBuffer.wrap(data);
levelManager.setCurrentCampaignLevel(buffer.getInt());
levelManager.setCampaignScore(buffer.getInt());
break;
default:
levelManager.setCurrentCampaignLevel(0);
levelManager.setCampaignScore(0);
}
}
@Override
public void onConnected(Bundle bundle) {
loadCampaignFromCloud();
}
@Override
public void onDisconnected() {
}
}