package net.unverschaemt.pinfever; import android.content.Context; import android.content.ContextWrapper; import android.view.View; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.koushikdutta.async.future.FutureCallback; import java.io.File; import java.util.ArrayList; import java.util.List; /** * Created by D060338 on 30.05.2015. */ public class FriendsHandler { private Context context; private DataSource dataSource; private ServerAPI serverAPI; int avatarsLoaded = 0; public FriendsHandler(Context context) { this.context = context; this.dataSource = new DataSource(context); this.serverAPI = new ServerAPI(context); } public List<User> getFriends(FriendsCallback callback) { dataSource.open(); List<User> friends = dataSource.getAllFriends(); dataSource.close(); for (User friend : friends) { friend.setAvatar(AvatarHandler.loadAvatarFromStorage(context, friend.getId())); } updateFriendsFromServer(callback); return friends; } public void getPlayer(String searchKey, final GetPlayerCallback callback) { serverAPI.connect(serverAPI.urlPlayersSearch, searchKey, null, new FutureCallback() { @Override public void onCompleted(Exception e, Object result) { JsonObject jsonObject = (JsonObject) result; if (jsonObject.get(ServerAPI.errorObject).isJsonNull()) { JsonObject data = jsonObject.getAsJsonObject(ServerAPI.dataObject); JsonArray players = data.getAsJsonArray(ServerAPI.players); if (players.size() > 0) { JsonObject playerJSON = players.get(0).getAsJsonObject(); final User player = ServerAPI.convertJSONToUser(playerJSON); loadAvatar(player, new FutureCallback() { @Override public void onCompleted(Exception e, Object result) { player.setAvatar(AvatarHandler.loadAvatarFromStorage(context, player.getId())); callback.onPlayerLoaded(player); } }); } else { callback.onPlayerLoaded(null); JsonObject userNotFoundObject = new JsonObject(); userNotFoundObject.addProperty(ServerAPI.errorInfo, context.getString(R.string.message_UserNotFound)); userNotFoundObject.addProperty(ServerAPI.errorObject, ""); ErrorHandler.showErrorMessage(userNotFoundObject, context); } } else { callback.onPlayerLoaded(null); ErrorHandler.showErrorMessage(jsonObject, context); } } }); } private void updateFriendsFromServer(final FriendsCallback callback) { serverAPI.connect(ServerAPI.urlFriendsList, "", null, new FutureCallback() { @Override public void onCompleted(Exception e, Object result) { JsonObject jsonObject = (JsonObject) result; final List<User> friends = new ArrayList<User>(); if (jsonObject.get(ServerAPI.errorObject).isJsonNull()) { JsonObject data = jsonObject.getAsJsonObject(ServerAPI.dataObject); JsonArray friendsJSON = data.getAsJsonArray(ServerAPI.friends); avatarsLoaded = 0; for (final JsonElement friend : friendsJSON) { final User newFriend = ServerAPI.convertJSONToUser(friend.getAsJsonObject()); loadAvatar(newFriend, new FutureCallback() { @Override public void onCompleted(Exception e, Object result) { avatarsLoaded++; newFriend.setAvatar(AvatarHandler.loadAvatarFromStorage(context, newFriend.getId())); if (avatarsLoaded == friends.size()) { callback.onFriendsLoaded(friends); } } }); friends.add(newFriend); } updateFriendsList(friends); } else { callback.onFriendsLoaded(null); ErrorHandler.showErrorMessage(jsonObject, context); } } }); } private void loadAvatar(User player, FutureCallback futureCallback) { ContextWrapper cw = new ContextWrapper(context); File directory = cw.getDir("imageDir", Context.MODE_PRIVATE); serverAPI.downloadFile(ServerAPI.urlGetPlayer, player.getId() + "/img.jpeg", new File(directory, player.getId() + ".jpeg"), futureCallback); } private void updateFriendsList(List<User> friends) { dataSource.open(); dataSource.updateFriends(friends); dataSource.close(); } }